2016-06-21 3 views
3

.fsx 파일과 Visual Studio의 대화 형 창에서 Seq.choose 함수 (아래에 설명)에 대해 MSDN의 example을 시도했지만 반복적으로 오류 FS0001을 반환합니다. "없음"옵션은 추상 옵션 유형 'a 옵션이 아닌 PageExt 유형입니다.F # Seq.choose() 오류 FS0001

PageExt 유형에 대한 설명이나 None 키워드가 일치 식의 "값 없음"옵션을 나타내야 할 때 이것이 오류를 반환하는 이유는 헛수고로 검색했습니다.

let numbers = seq {1..20} 
let evens = Seq.choose(fun x -> 
           match x with 
           | x when x%2=0 -> Some(x) 
           | _ -> None) numbers 
printfn "numbers = %A\n" numbers 
printfn "evens = %A" evens 
;; 

            | _ -> None) numbers 
    ---------------------------------------^^^^ 
> 

C:Path\stdin(38,40): error FS0001: This expression was expected to have type 
    'a option  
but here has type 
    PageExt 

누구든지 제공 할 수있는 도움에 감사드립니다!

+8

이것은 'PageExt'라고 정의 된 타입과 매우 흡사합니다. 하나의 유니온 케이스는'None'으로 불립니다. 대화 형 창을 마우스 오른쪽 버튼으로 클릭하고 "세션 재설정"을 클릭하십시오. –

답변

8

PageExt 유형은 이전에 현재 FSI 세션으로 가져온 것으로 무언가를 None에 바인딩 한 것으로, FSI가 일반 옵션 유형을 인식하지 못하도록 차단합니다.

F #에서는 원래 값을 "음영"하는 이름을 다시 사용할 수 있습니다. 예를 들어, FSI, 당신은 입력 할 경우 :

let a = 1;; 
let a = 2.3;; 
a;; 

당신은 그것을 보여줍니다 것을 알 수 있습니다 : 다음

val a : int = 1 

마지막으로

val it : float = 2.3 

이 ISN

val a : float = 2.3 

의 정의를 변경하지 않았습니다. 원래의 바운드 값을 음영 (또는 숨김)하는 새로운 a 이름을 정의합니다.

귀하의 경우 PageExt 유형의 문자가 포함 된 None 이름이 있는데이 문자는 섀도 잉 Option.None 인 경우 사용할 수 없습니다.

가장 쉬운 방법은 FSI 세션을 재설정하는 것입니다. F # 대화 형 창에서 마우스 오른쪽 버튼을 클릭하고 "반복적 인 세션 재설정"을 선택하십시오. 그런 다음 붙여 넣은 코드를 실행하면 정상적으로 작동합니다.

+1

대상이 맞습니다. 고맙습니다! –