2011-09-20 11 views
22

Đây là tuyên bố đặc trưng của một thành viên trừu tượng trong F #:Không có tên đối số trong khai báo trừu tượng?

abstract member createEmployee : string -> string -> Employee 

Bạn xác định loại đối số nhưng không phải tên của họ. Không có tên, làm thế nào để bạn biết được mỗi tham số là gì khi bạn thực hiện giao diện? Nói cách khác, làm thế nào để bạn biết nếu giao diện dự kiến ​​sẽ được thực hiện như 1- hoặc 2-?

1- member this.createEmployee firstName lastName = ... 
2- member this.createEmployee lastName firstName = ... 

Tôi đang tìm vấn đề từ góc độ sai (được sử dụng cho C#)?

Trả lời

34

gì về:

abstract member createEmployee : firstName:string -> lastName:string -> Employee 

?

+3

Thanks, điều này là hơi lúng túng :-), tôi chưa bao giờ thấy trước đây ví dụ với params có tên trong doc online. –

+11

Điều thú vị là có một lỗi khi quấn các cặp tên tham số & kiểu trong các dấu ngoặc như bạn muốn khi chỉ định kiểu cho các tham số hàm như: 'abstract member createEmployee: (firstName: string) -> (lastName: string) - > Employee' – danielrbradley

5

Cú pháp cho điều này là IMO siêu khó sử dụng. Tôi muốn làm điều này với các thông số như một tuple (như một phương pháp C#) và chỉ thông qua thử và sai tôi đã tìm thấy điều này để làm việc:

abstract member PutChar : x:int * y:int * c:char * flag:Background -> unit 

Và biến thể xấu xí này cũng làm việc:

abstract member PutChar : x : int * y : int * c : char * flag : Background -> unit 

Dưới đây là những điều mà tất cả cảm thấy hợp lý nhưng thất bại với lỗi tương tự - Unexpected symbol ':' in member definition.:

// ALL BAD vvv 
    abstract member PutChar : (x:int * y:int * c:char * flag:Background) -> unit 
    abstract member PutChar : (x:int, y:int, c:char, flag:Background) -> unit 
    abstract member PutChar : (x:int) * (y:int) * (c:char) * (flag:Background) -> unit 
    // ALL BAD ^^^ 
+0

Nếu không có tên tham số, biến thể không hợp lệ đầu tiên sẽ được biên dịch thành một phương thức CLI lấy một đối số xảy ra là một bộ tuple. Đó là chữ ký đáng chú ý khác với phương pháp CLI 4-đối số; bạn không thể đặt tên cho các thành phần của các bộ dữ liệu được lồng ghép như thế này. Thứ hai là cú pháp không hợp lệ; dấu phẩy không được sử dụng trên các loại theo cách này. Tôi không biết tại sao thứ ba không được phép. – Vandroiy