F 번호의 선택 유형 이해하려고 노력 :내가 스콧 Wlaschin로의 ROP 문서의 코드를 이해하는 데 어려움을 겪고 있었어요
이http://fsharpforfunandprofit.com/posts/railway-oriented-programming-carbonated/
그는 F 번호에 Choice1Of2 & Choice2Of2 유형을 사용합니다을. 그렇게하지, 내가 직접 Choice1Of2 (choice4)를 할 때 왜 그
module TestModule
open Microsoft.VisualStudio.TestTools.UnitTesting
// generic union type (like Choice1Of2, I think)
type Things<'a> =
| Thing of 'a
// explicit union type (for comparison)
type Numbers =
| Integer of int
[<TestClass>]
type Tests() =
// method to make a Choice1Of2 (from the article)
let makeChoice (a : string) : Choice<string, 'a> =
Choice1Of2 a
[<TestMethod>]
member public this.WhyYouNoHaveItemValueAndStuff() =
let choice1 = Thing "test" // debug = Thing "this"
let choice2 = Integer 3 // debug = Integer 3
let choice3 = makeChoice "test" // debug = Choice1Of2 w/Item = "test"
let choice4 = Choice1Of2 "test" // debug = [email protected] ???
// bogus test stuff below here
let choices = (choice1, choice2, choice3, choice4)
Assert.IsNotNull(choices)
입니다 : 본인은 다음과 같은 시나리오를 가로 질러 왔을 때, 그들을 디버깅하여 이러한 일을 활용하는 방법과 타협하려고했다 선택 3과 동일한 디버깅 결과를 얻습니다. 왜 choice1을 선택 2와 같은 종류의 결과를 얻는 데 필요한 방법을 사용합니까? & 2?
는편집 :
let choice4 : Choice<string, Object> = Choice1Of2 "test"
그것을 밖으로 작동합니다
이에 choice4를 변경하는 것으로 보인다. 왜 저에게 필요한지는 완전히 분명하지 않습니다. 과제의 오른쪽은 어떤 유형이 설정되는지에 대한 명확한 정보입니다.
정확히 어떤 유형의 추론이 거기에서하고 있는지 확실하지 않지만이 값의 정의되지 않은 유형에 혼동을 일으킬 수 있습니다. 실행 시간 타입은 두 가지 모두'Choice'이며, 사용법은 동일합니다. 'choice03'과'choice4'에': Choice '과 같은 타입 주석을 사용하면 디버그 정보에서도 똑같이 보입니다. –
Vandroiy
응답을 위해 @Vandroiy Thx. 그것은 실제로 올바른 행동을 강요합니다. 아직도 이상해야합니다. – TBone
이것은 올바른 행동에 관한 것이 아니라 디버거에서 관찰하는 것에 관한 것입니다.내 생각 엔 당신이보고있는 것은 choice4가 불완전하게 추론 된 유형을 가지고 있으며 불완전하게 추론 된 유형의 내부 표현이 일반 매개 변수가있는 유형의 표현과 다르다는 것입니다. 이러한 바인딩이 평가되거나 (디버거와 달리) 코드에서 형식 검사가 다르게 나타나는 경우를 제외하고는 VS 구현 세부 사항 이상은 아닙니다. –