openlang

F#에서 파일 존재 여부를 검사할 때의 부정 연산

파일이 없으면 오류를 내려고 아래 코드를 쓰고 있어요.

  if !File.Exists(inputPath) then
      printfn "inputPath doesn't exist %s" inputPath; failwith "stop"

그런데 이 오류가 나와요. 제가 뭘 잘못 이해한 건가요?

  error FS0001: This expression was expected to have type
      bool ref    
  but here has type
      bool
영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    F#에서 !의 의미는 다르며, 이렇게 정의됩니다:

      type 'a ref { Contents : 'a }
      let (!) (cell : ref 'a) = cell.Contents

    !가 요구하는 피연산자는 bool ref인데 bool을 전달해서 실패한 것입니다.

    대신 not 함수를 쓰세요:

      if not(File.Exists(inputPath)) then
          printfn "inputPath doesn't exist %s" inputPath; failwith "stop"
    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. `String::from_utf8`는 실패하면 바이트를 돌려준다

    값을 소비하는 API는 실패했을 때 그 값이 어떻게 되는지 정해야 합니다. String::from_utf8는 Vec<u8>를 값으로 받고, 실패하면 오류가 그것을 소유합니다. 출력은 bad byte at 2, 4 bytes…

    답글 0최근 활동 rust
  2. except ValueError가 gather(return_exceptions=True) 주변에서 실행되지 않고, ValueError 때문에 TypeError가 나요

    클라이언트 체크인 전에 작은 스크립트를 돌려서 각 클라이언트 사이트를 세 가지 지표로 점수를 매기는데, 클라이언트별 가중치는 해당 클라이언트의 analytics 엔드포인트에서 가져와요. 가져오는 부분은 return_excep…

    답글 5최근 활동 python
  3. 성공 경로에서 샌 errdefer 해제

    테스트에서 메모리가 샜는데, 새는 곳이 성공한 경로였습니다. 함수는 임시 버퍼를 할당하고, 호출자가 소유할 결과로 파싱한 뒤, 임시 버퍼를 errdefer allocator.free(scratch)로 해제했습니다. 오류 경로…

    답글 2최근 활동 zig