Cân nhắc tôi có hai khác nhau thư viện loại:Inline chức năng và kiểu mở rộng
type Foo = { foo : string }
type Bar = { bar : int32 }
Tôi muốn thực hiện chức năng chung zoo
rằng sẽ làm việc cho một trong hai Foo
hoặc Bar
trường. Và tôi không thể thay đổi Foo
và Bar
vì chúng là một phần của mã thư viện.
Đây là nỗ lực đầu tiên của tôi sử dụng phần mở rộng loại hình và chức năng inline như được giải thích here:
// Library.fs
module Library
type Foo = { foo : string }
type Bar = { bar : int32 }
// Program.fs
type Foo with
static member zoo (f : Foo) = "foo"
type Bar with
static member zoo (b : Bar) = "bar"
let inline zoo (x : ^t) =
(^t : (static member zoo : ^t -> string) x)
let f = zoo { foo = "1" } // error FS0001: The type 'Foo' does not support the operator 'zoo'
Tại sao không inline định nghĩa hàm dựa trên phần mở rộng loại? Làm cách nào để giải quyết sự cố của tôi mà không thay đổi các định nghĩa loại Foo
và Bar
ban đầu?