F#
정적으로 해결 된 유형 매개 변수
수색…
통사론
-
s
는 컴파일 타임에 받아들이^a
의 인스턴스입니다.이 구문은 실제로 구문을 사용하여 호출하는 멤버를 구현하는 모든 것일 수 있습니다. -
^a
는'a
(또는'A
또는'T
'A
)와 비슷한 제네릭과 비슷하지만 컴파일 타임에 해결되며 메서드 내에서 요청 된 모든 용도에 맞는 것을 허용합니다. (인터페이스 필요 없음)
길이 멤버가있는 모든 항목에 대한 간단한 사용법
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
클래스, 인터페이스, 레코드 사용
// Record
type Ribbon = {Length:int}
// Class
type Line(len:int) =
member x.Length = len
type IHaveALength =
abstract Length:int
let inline getLength s = (^a: (member Length: _) s)
let ribbon = {Length=1}
let line = Line(3)
let someLengthImplementer =
{ new IHaveALength with
member __.Length = 5}
printfn "Our ribbon length is %i" (getLength ribbon)
printfn "Our Line length is %i" (getLength line)
printfn "Our Object expression length is %i" (getLength someLengthImplementer)
정적 멤버 호출
이것은 아무것도 GetLength
않고 int를 반환하는 GetLength
라는 이름의 메서드로 모든 유형을 허용합니다.
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow