TL; DR:()
trong bối cảnh này có một ý nghĩa hoàn toàn khác so với nó có trong C#, do đó, không định dạng nó theo cách tương tự như trong C# - sử dụng let myFunc() =
và myFunc()
thay vào đó, phản ánh tốt hơn ngữ nghĩa thực tế và sẽ lần lượt làm rõ cách bạn suy nghĩ và hiểu mã.
Trong C#, ()
nghĩa một tập rỗng của các tham số (đối với định nghĩa chức năng/constructor) hoặc đối số (đối với chức năng/constructor gọi trang web); tức là, nó xác định hoặc gọi hàm nullary. Trong F #, ()
là một loại chữ unit
, giống như cách 42
là một loại chữ int
; tức là, nó là một giá trị trong và của chính nó, giống như []
là một giá trị cho một danh sách trống. Sự khác biệt này có rất ít ý nghĩa.
Trong F #, khi bạn xác định một -function let
với chỉ ()
cho các thông số, như trong let myFunc() =
, bạn đang thực sự sử dụng cú pháp mô hình khớp để xác định một unary chức năng với một tham số kiểu unit
(không chức năng nullary!). Ví dụ cụ thể của mô hình kết hợp như vậy được đưa cho các cấp mà nhiều người không nhận ra rằng đó là mô hình phù hợp ở nơi đầu tiên; nhưng, trên thực tế, việc xác định hàm là let myFunc() =
thay vì là let myFunc (_:unit) =
cũng giống như có let myFunc [] =
thay vì let myFunc (x:'a list) =
(và sau đó khẳng định rằng x
trống).
Và trong F #, khi bạn gọi một -function let
với ()
, như trong myFunc()
, bạn không biểu thị 'không có đối số'; bạn đang thực tế cung cấp một đối số kiểu unit
, có giá trị ít được sử dụng thường xuyên đến mức nó có cú pháp ngữ của riêng nó: ()
.
Để thuyết phục chính mình unit
là khác nhau từ 'không có tham số/lập luận', và trên thực tế chỉ là một tham số/lập luận giống như bất kỳ khác, hãy xem xét một thực tế rằng sau đây là hoàn toàn hợp pháp:
let myFunc() (i:int) (_:unit*unit) = i
let n = myFunc() 42((),())
printfn "%d" n
Như bạn có thể thấy, việc cung cấp điều trị khoảng trắng đặc biệt là unit
là ngớ ngẩn vì đó là không phải là đặc biệt. ; -]
summarily, vì nó là bình thường (? Cần thiết) để tách bất kỳ tên tham số/cãi nhau với khoảng trắng, nó là sau đó ngữ để phù hợp và làm tương tự với biểu tượng mẫu/giá trị:
let myFunc() =
"Hello"
myFunc()
Không bao giờ nghĩ về nó theo cách này, có ý nghĩa hơn bây giờ! –