내가 열거에 문자열에서 일반 변환 연산자를 정의하기 위해 노력하고있어, 나는이처럼 사용하고 싶습니다 :F # 형 제약
:let day = asEnum<DayOfWeek>("Monday")
을하지만이 구현
let asEnum<'a, 'b when 'a: (new : unit -> 'a) and 'a : struct and 'a :> ValueType and 'a : enum<'b>> text =
match Enum.TryParse<'a>(text) with
| true, value -> Some value
| false, _ -> None
는
난 단지 다음과 같이 사용할 수 있습니다 :
let day = asEnum<DayOfWeek,_>("Monday")
나이 :
let day:DayOfWeek option = asEnum("Monday")
나는 형 제약에서 전부 'a : enum<'b>
를 생략하면 내가 원하는대로, 내가 가질 수 있지만, 누군가가 유형을 지정하지 않는 다음 경우는 정말 좋아하지 않는, int
로 기본 설정됩니다, I 제약 조건을 지정할 때처럼 컴파일 시간 오류를 내기를 원합니다.
하나의 유형 매개 변수를 지정하고 다른 하나를 유추하는 트릭이있을 수 있습니까? 어떤 아이디어?
어머나. 나는 그것이 유효한 구문인지조차 몰랐다. 나는 당신이''a : enum ''으로 변경하면 그가 원하는 것을 줄 것이라고 생각합니다. 또한 경고를 피하기 위해'let e : System.Reflection.BindingFlags option = asEnum "DeclaredOnly"를 할 수 있습니다. –
Daniel
왜이 기능이 작동하지만 '<' '>'사이에 동일한 제약 조건을 두지 않습니까? – Daniel
@Daniel - @ovastus가'int'를 강요하기를 원하지 않는다고 생각합니다. 가능한 경우 추측 할 수 있기를 바랍니다. – kvb