你可能知道下面的適配器例如:靜態解析類型的記錄
type Cat() =
member this.Walk() = printf "Cat walking"
type Dog() =
member this.Walk() = printf "Dog walking"
let inline walk (animal : ^T) =
(^T : (member Walk : unit -> unit) (animal))
let cat = new Cat()
let dog = new Dog()
walk cat
walk dog
不同版本的步行路程,是您的貓與狗類的靜態編譯。
然後我嘗試了以下內容:
type Cat = { Name : string }
type Dog = { Name : string }
let inline showName (animal : ^T) =
let name = (^T : (member Name : string) (animal))
printf "%s" name
let cat = { Name = "Miaou" } : Cat
let dog = { Name = "Waf" } : Dog
showName cat
showName dog
,但我得到以下編譯錯誤:
The type 'Dog' does not support any operators named 'get_Name'
與同爲類目錄。
但是當探索兩個記錄的生成類時,它實際上包含此生成的Name屬性的get_Name方法。
是否有不同的語法來訪問靜態解析的泛型中的記錄字段,還是F#編譯器的限制?
我碰到與擴展方法同樣的問題(應該知道)和F#列出了靜態op_Append操作。我也很好奇。 – 2011-10-26 12:25:54