수색…


통사론

  • 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