Chúng ta hãy cùng giá trị hàm đơn giản f1
:Tại sao giá trị hàm tổng quát rõ ràng ràng buộc khác với giá trị tương tự không chung chung?
let f1 = printfn "*bind f1*"; fun() -> printfn "f1()"
f1
với phím tắt trong FSI như
*bind f1*
val f1 : (unit -> unit)
và, được gọi, cư xử như mong đợi
>() |> f1 |> f1;;
f1()
f1()
val it : unit =()
Bây giờ chúng ta hãy xem một chức năng tương tự giá trị, nhưng được thực hiện một cách rõ ràng chung f2<'a>
:
let f2<'a> = printfn "*bind f2*"; fun() -> printfn "f2()"
f2
liên kết trong FSI như
val f2<'a> : (unit -> unit)
mà không cần bất kỳ *bind f2*
sản lượng nào, nhưng sau đó, được gọi, kết quả đầu ra nó trên mỗi f2
gọi:
>() |> f2 |> f2;;
*bind f2*
f2()
*bind f2*
f2()
val it : unit =()
Câu hỏi của tôi là: những gì có thể là nguyên nhân cho sự chênh lệch quan sát như vậy?
f2 là hàm kiểu (10.2.3 trong f # spec) – desco
@desco: Cảm ơn bạn, Vladimir! Nếu bạn không quan tâm để đưa điều này vào một câu trả lời tôi sẽ rất vui khi chấp nhận nó. –