string
.net 프레임 워크에서 문자열의 별칭 인 경우 왜 이런 일이 발생하고 어떻게 해석해야합니까?
type JustAString = string
> type JustAString = string
type JustAStringAgain = String
> type JustAStringAgain = | String
기존 답변은 string
F # 형식이지만 형식 String
이 아니라는 점에서 정확 합니다 ( System
네임 스페이스 를 열지 않는 한 ), 이것이 두 정의가 다른 이유입니다. 첫 번째 경우는 유형 별칭을 생성하고 두 번째 경우 는 기존 답변에서 제안 된 모듈 별칭이 아닌 구별 된 공용체를 선언합니다 .
첫 번째 경우 정의는 유형 별칭 만 만듭니다. 다음을 사용하여이를 확인할 수 있습니다 typeof<T>
.
> type MyString = string;;
> typeof<MyString>.FullName;;
val it : string = "System.String"
두 번째 경우에는 단일 케이스 이름이 지정된 구별 된 공용체를 정의합니다 String
(이름은 무엇이든 될 수 있습니다. 핵심은 String
알려진 유형이 아니므로 케이스의 이름으로 처리됩니다). 이를 확인하기 GetUnionCases
위해 F # 리플렉션 모듈에서 사용할 수 있습니다 .
> type MyString = String;;
type MyString = | String
> open Microsoft.FSharp.Reflection
for u in FSharpType.GetUnionCases(typeof<MyString>) do
printfn "%s" u.Name;;
String
val it : unit = ()
정의는 단순히 차별적 인 노조의 매우 기본적인 경우입니다. 케이스를 더 추가 할 수 있고 케이스도 필드를 포함 할 수 있습니다.
type MyString = String | SomeOtherName of int
트릭은 String
알려진 유형 이름이 아니라는 것입니다. System
네임 스페이스 를 열면 유형 별칭 만 다시 얻습니다.
> open System;;
> type MyString = String;;
> typeof<MyString>.FullName;;
val it : string = "System.String"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다