時,我想延長一些系統類型和以後通過內聯使用它們錯誤的擴展方法內聯
type System.String with
member this.foo n = this + "!" + n
type System.Boolean with
member this.foo n = sprintf "%A!%A" this n
現在我把這些擴展方法
let x = "foo".foo "bar"
let y = true.foo "bar"
這給了我這個
- val x : System.String = "foobar"
- val y : string = "true!"bar""
所有罰款和花花公子 - 但現在我想調用.foo
包裝成一個內聯˚F結
let inline foo n v = (^T : (member foo : ^N -> ^S) v, n)
let z = foo "bar" "baz"
只有現在我得到一個編譯錯誤告訴我,
> The type 'string' does not support the operator 'foo':
以及...它!
有人能解釋一下怎麼回事?