tôi cố tình thêm x đến hết chức năng nàyTại sao các đối số này được suy ra để có loại đơn vị?
let myMax x y =
if x > y then x else y
x
Tôi đã mong rằng x và y đối số vẫn của 'một loại là, nhưng tôi nhận được chữ ký này để thay thế:
myMax : x:unit -> y:unit -> unit
Tại sao những các đối số suy ra để có một loại đơn vị?
Chỉnh sửa: Cảm ơn bạn @gilles cho câu trả lời. Hãy xem xét hai chức năng sau:
let foo x y =
0 // warning
x
val foo : x:'a -> y:'b -> 'a
let foo2 x y =
if x > y then x else y // no warning
x
val foo2 : x:unit -> y:unit -> unit
Điều gì làm cho hai chữ ký khác nhau? Có vẻ như trong hàm thứ hai trình biên dịch giải thích kết quả của việc so sánh x -either hoặc Y-như đơn vị
Tôi cũng muốn nói thêm rằng nếu bạn thấy mình sử dụng 'ignore', rất có thể, bạn đang làm điều gì sai . Ví dụ cụ thể này cũng không phải là một ngoại lệ: biểu thức 'if-then' không có nghĩa gì cả, bởi vì giá trị trả về của nó bị vứt đi và nó không tạo ra bất kỳ tác dụng phụ nào. –