2012-03-09 2 views
11

첫 번째 일치는 작동하지만 두 번째 일치는 작동하지 않습니다. if/elif 체인을 사용하는 것 외에 변수를 선언하지 않고도 일치시킬 수있는 방법이 있습니까?은 fsharp의 typeof와 일치합니다.

(I 변수의 t와 일치하는 동안이 값 ELEM을 사용하여 주)

let t = typeof<string> 
    match propType with 
    | t    -> elem.GetValueAsString() :> obj 
    | typeof<string> -> elem.GetValueAsString() :> obj 
+0

하면 객체의 기본 유형을 따라 일치하도록 시도하거나 당신이 당신의 결과에 대한 단지 의아해했다 있었습니까? –

+0

아니요 유형이 있고 유형 변수의 기본 유형은 항상 유형입니다. – nicolas

답변

12

첫 번째 패턴 실제로 typeof<string> 일치하지 않습니다. t은 이전의 t을 쉐도 잉하는 새로운 값 t으로 typeof<string>과 같습니다.

typeof<string>은 리터럴이 아니기 때문에 두 번째 패턴도 잘 작동하지 않습니다 (예제에서는 중복 패턴 임). , 당신이 사용할 수있는

match propType with 
    | t when t = typeof<string> -> elem.GetValueAsString() :> obj 
    | t -> elem.GetValueAsString() :> obj 
+0

참으로. 초보자 함정. 나는 일치에 대해서 re-rtfm ... – nicolas

6

당신이 값의 유형에 대해 일치하려는 경우 : 다음과 같이 when 가드를 사용해야합니다 : 운영자

예 :

let testMatch (toMatch:obj) = match toMatch with 
         | :? string as s -> s.Split([|';'|]).[0] 
         | :? int as i -> (i+1).ToString() 
         | _ -> String.Empty 
+2

내 경우에는 toMatch가 그 자체이다. 그래서 경비원 만 afaik에서 일합니다. – nicolas

+0

Ok, never mind;) –

+1

이것은이 질문에 대한 답이 아니지만 제 질문이었습니다. :) –

관련 문제