F # cho phép chức năng để chỉ khác nhau bởi một tham số tùy chọn, ví dụ quá tải?Phân biệt giữa f # chức năng quá tải với các thông số tùy chọn
Trả lời
Tôi không nghĩ rằng có một cách hợp lý để gọi hàm đầu tiên nếu hai hàm quá tải chỉ khác nhau theo tham số tùy chọn. Như đã đề cập trong các ý kiến, sử dụng này có lẽ là một thiết kế kém và bạn nên đổi tên các tham số.
Như bạn có thể nhận thấy, khi bạn cố gắng gọi hàm một cách bình thường sử dụng MyClass().func("A","B")
, bạn nhận được một thông báo lỗi phàn nàn về sự nhập nhằng:
lỗi FS0041: Một tình trạng quá tải duy nhất cho phương pháp 'func' could không được xác định dựa trên thông tin loại trước điểm chương trình này. Có thể cần chú thích loại. Ứng viên: thành viên MyClass.func: a: string *? B: string -> string, thành viên MyClass.func: a: string * b: string -> string
Bạn có thể gọi quá tải thứ hai một cách rõ ràng theo hai cách (có hoặc không có ?b
) nhờ vào sự thật rằng bạn rõ ràng có thể cung cấp Some
giá trị cho một đối số tùy chọn:
MyClass().func("A")
MyClass().func("A",?b=Some "B")
ra khỏi tò mò, nó chỉ ra rằng bạn có thể gọi quá tải đầu tiên thông qua một chế thành viên tĩnh. Điều này khá xấu xí và có lẽ bạn không nên làm điều này, nhưng nó gọi là tình trạng quá tải đầu tiên:
let inline callFunc (o:^T) a b =
(^T : (member func : string * string -> string) (o, a, b))
callFunc (MyClass()) "A" "B"
- 1. F #: Chức năng quá tải
- 2. Nhiều thông số tùy chọn chức năng
- 3. Chức năng quá tải được đánh giá với số ba
- 4. Loại bỏ loại chức năng quá tải đã chọn cho các loại đối số đã cho
- 5. Quá tải chức năng ==
- 6. Emitting chức năng với tùy chọn tham số
- 7. std :: async với các chức năng quá tải
- 8. javascript đối số tùy chọn chức năng
- 9. đối số tùy chọn trong các chức năng fortran
- 10. Chức năng quá tải bằng Python: Thiếu
- 11. toán tử quá tải với std :: tham số chức năng
- 12. Chức năng quá tải với Fortran
- 13. Quá tải phương pháp với tham số tùy chọn
- 14. Lập trình chức năng nhanh - "Bind tùy chọn" so với "Bản đồ tùy chọn"
- 15. Chức năng quá tải với ellipsis
- 16. quá tải của mẫu chức năng với tính năng tự
- 17. quá tải MySQL lưu trữ chức năng
- 18. Chức năng nạp chồng quá tải thông qua std :: function
- 19. Chuyển đổi các chức năng quá tải thành các mẫu chức năng chuyên ngành
- 20. Làm cách nào để sử dụng thông số quá tải hoặc tham số tùy chọn trong gỉ?
- 21. F # Chức năng so với giá trị
- 22. giấu quá tải chức năng ảo
- 23. Chức năng Javascript và các đối số tùy chọn
- 24. sự khác biệt giữa OptionalAttribute và các thông số tùy chọn trong C# 4.0
- 25. Chức năng quá tải nơi thông số chỉ khác nhau theo hình elip
- 26. R - Quá tải chức năng
- 27. Phân loại giữa các loại chức năng
- 28. Null đen loại thông số độ phân giải quá tải
- 29. luận Tùy chọn chức năng lambda
- 30. Chức năng quá tải trong C++
bạn chỉ có thể đổi tên tham số thứ hai trong bất kỳ chức năng: 'kiểu MyClass() = viên this.func (một : string, b: string) = "func (a, b)" thành viên this.func (a: string,? c: string) = "func (a,? c)" let test = MyClass() let arg1 = "2" cho arg2 = "12" test.func (arg1, b = arg2) |> printfn "% s" // func (a, b) test.func (arg1, c = arg2) |> printfn "% s" // func (a,? c) ' –