2014-09-12 16 views
7

Trong f # i có thể dễ dàng liên kết (+) hoặc (*) toán tử. Tại sao tôi không thể làm tương tự với (**)?Tại sao tôi không thể liên kết toán tử (**)

> let s = (+);; 
val s : (int -> int -> int) 

> let f = (**);; 
    let f = (**);; 
    ------------^^ 
C:\Users\mqrx84\AppData\Local\Temp\stdin(4,13): error FS0010: Incomplete structured construct at or before this point in binding 

Trả lời

15

(**) được sử dụng cho nhận xét nhiều dòng. Bạn cần tách các dấu ngoặc đơn khỏi toán tử với khoảng trắng, ví dụ: let f = (**);;

Để xác định các toán tử khác bắt đầu bằng *, khoảng trắng phải tuân thủ dấu ngoặc đơn mở; khác (* được hiểu như là sự khởi đầu của một bình luận : let (* + *) xy = (x + y)

Từ spec - http://fsharp.org/specs/language-spec/

+0

Vì vậy, đơn giản :) Bây giờ tôi đang chờ đợi thời gian hồi chiêu 10 phút để tôi có thể chấp nhận câu trả lời. –

+2

Như một sang một bên, nó là lạ sau đó rằng điều này hoạt động 'let f = (*)' –

+4

@ GrzegorzSławecki Trình biên dịch dường như để xử lý đó như là một trường hợp đặc biệt với mã thông báo riêng của nó 'LPAREN_STAR_RPAREN' –

Các vấn đề liên quan