2014-10-28 2 views
0

F #에 xxd 명령의 복제본을 쓰려고한다고 가정합니다. 두 가지 작동 모드가 있습니다. 하나는 이진 파일을 16 진 덤프로 변환하고 다른 하나는 -r을 선택하여 16 진 덤프를 다시 이진 파일로 변환합니다.F # : if-else를 표현식 (반환 값)으로 사용 하시겠습니까?

일부 언어 나이 같은 작성할 수 :

let (inputFile, isReverse) = if args.[0] == "-r" then 
    (args.[1], true) 
else 
    (args.[0], false) 
... 
if false == isReverse then 
    forwardMode inputFile 
else 
    reverseMode inputFile 

을하지만이 F 번호에 따라 컴파일하지 않는 것 같습니다. F #에서 이것을 작성하는 관용적 인 방법이 있습니까?

let isReverse = ref false 
let fileName = ref args.[0] 
if !args.[0] == "-r" then 
    isReverse := true 
    fileName := args.[1] 
... 
if false == !isReverse then 
    forwardMode !inputFile 
else 
    reverseMode !inputFile 

참고 : 나는 그들과 같은 것을 쓸 수있을 것 알고 있지만 나는 ref 또는 mutable의 큰 팬이 아니에요 내가 좋은 명령 줄 파서 라이브러리에 관심이 아니에요하는 나는 수도 또는 nuget과 연결되지 않을 수 있습니다.

답변

3

이 잘 F 번호

let (inputFile, isReverse) = 
    if args.[0] = "-r" then 
     (args.[1], true) 
    else 
     (args.[0], false) 
... 
if false = isReverse then 
    forwardMode inputFile 
else 
    reverseMode inputFile 

두 변경해야한다 : 들여 쓰 if 아차,`==`단지 오타 =

+0

이었다로 == 교체 (나는 내 ​​하루 작업에 C++를 작성합니다.) 나는 오프사이드 규칙에 익숙해 질 수 없다. 아마도 나는 'fsharpc'를 더 신중하게 들었어야했다. – nodakai