サーチ…
構文
-
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
という名前のメソッドを持つ型を受け入れ、何もGetLength
ずにintを返します:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow