2010-06-18 27 views
20

Hãy tưởng tượng giao diện sau trong C#:Làm thế nào để thực hiện một thành viên giao diện mà trả về void trong F #

interface IFoo { 
    void Bar(); 
} 

Làm thế nào tôi có thể thực hiện điều này trong F #? Tất cả các ví dụ tôi đã tìm thấy trong 30 phút tìm kiếm trực tuyến chỉ hiển thị các ví dụ có kiểu trả về mà tôi cho là phổ biến hơn trong một kiểu chức năng, nhưng cái mà tôi không thể tránh trong trường hợp này.

Dưới đây là những gì tôi có cho đến nay:

type Bar() = 
    interface IFoo with 
     member this.Bar() = 
      void 

Không với _FS0010:

bất ngờ từ khoá 'khoảng trống' trong expression_.

Trả lời

22

Đơn vị tương đương được định nghĩa cú pháp là ().

type Bar() = 
    interface IFoo with 
     member this.Bar() =() 
+0

Cảm ơn. Tôi thích học F #! –

+0

@Drew - Đó là một ngôn ngữ tuyệt vời. – ChaosPandion

+0

Mã C# là một phương thức, không phải là thuộc tính. Để tái tạo điều này trong F #, tôi tin rằng bạn cần một thành viên có đơn vị chữ ký -> đơn vị. Điều này sẽ được viết "thành viên this.Bar() =()". Nếu không có tham số đơn vị, F # có thể là một thuộc tính với một getter. – Jason

6

Kiểu trả về cần phải được(), vì vậy cái gì đó như viên this.Bar =() nên làm các trick

+7

Để trở thành pedantic, return _type_ là 'unit', chỉ _value_ của kiểu đó được đánh vần'() '. – Brian

7

Đối với thông tin tổng quát về F # loại, xem

The basic syntax of F# - types

Từ trang đó:

đơn vị loại chỉ có một giá trị, được viết là "()". Nó hơi giống như "void", theo nghĩa là nếu bạn có một hàm mà bạn chỉ gọi cho các tác dụng phụ (ví dụ: printf), một hàm như vậy sẽ có kiểu trả về là "đơn vị". Mỗi hàm nhận một đối số và trả về kết quả, vì vậy bạn sử dụng "đơn vị" để biểu thị rằng đối số/kết quả là không quan tâm/vô nghĩa.

+0

Cảm ơn bạn đã liên kết. Tôi đã bao gồm một trích dẫn từ trang trong câu trả lời của bạn. –

3

Tương đương trong F # là:

type IFoo = 
    abstract member Bar: unit -> unit 
Các vấn đề liên quan