Để tạo một chuỗi các lớp học của tôi,F # - Tôi có thể sử dụng tên kiểu như một hàm hoạt động như một hàm tạo mặc định không?
type MyInt(i:int) =
member this.i = i
[1;2;3] |> Seq.map(fun x->MyInt(x))
nơi fun x->MyInt(x)
có vẻ là không cần thiết. Sẽ tốt hơn nếu tôi có thể viết Seq.map(MyInt)
Nhưng tôi không thể. Một giải pháp mà tôi có thể nghĩ đến là xác định một chức năng riêng biệt
let myint x = MyInt(x)
[1;2;3] |> Seq.map(myint)
Có cách nào tốt hơn để làm điều này không?
Định nghĩa của bạn về 'Mới' không biên dịch cho tôi trong bản Beta VS11. Tuy nhiên, một biến thể đơn giản hơn: 'let inline New x = (^ t: (mới:^u ->^t) x)'. – kvb
Tôi đã thử rằng đầu tiên, nhưng với ràng buộc rõ ràng '^ t khi^t: (mới:^u ->^t)' mà không biên dịch trong VS2010. Vui mừng khi biết có một cách đơn giản hơn để thực hiện việc này. – Daniel
Oddly trình biên dịch chỉ hỗ trợ ràng buộc constructor rõ ràng của biểu mẫu 'new: unit -> 't' (có thể biểu diễn trực tiếp trong .NET metadata), nhưng bạn có thể sử dụng biểu thức _invocation biểu thức ràng buộc chung hơn và cho trình biên dịch suy ra các ràng buộc . Nó chắc chắn là một lỗ hổng trong hệ thống. – kvb