Ngoài các câu trả lời khác, dưới đây là một vài "giải pháp gần như" khác. Họ không hoàn toàn là những gì bạn muốn, nhưng dù sao cũng đáng biết.
Sử dụng một danh sách (hoặc một mảng) và phù hợp với mô hình:
let f = function
| [a, b] -> ...
| [a] -> ...
| [] -> failwith "too few arguments"
| _ -> failwith "too many arguments"
f ["a"]
f ["a" ; "b"]
vấn đề: các thông số không được đặt tên, không rõ ràng từ chữ ký chức năng có bao nhiêu thông số phải mất.
Sử dụng một kỷ lục để vượt qua tất cả các thông số tùy chọn:
type FParams = { a : string; b : string }
let fdefault = { a = "a" ; b = "b" }
let f (pars: FParams) = ...
f { fdefault with b = "c" }
Vấn đề: một cũng là tùy chọn, mà không phải là những gì bạn muốn. Có thể hữu ích mặc dù.
Đó là một thói quen xấu để trả lời, bạn không thực sự cần nó, nhưng đó là những gì đến với tâm trí của tôi. Nếu đối số của bạn là danh sách các giá trị cùng loại, chỉ cần đặt chúng thành 'danh sách'. Nếu một trong số chúng là tùy chọn (ví dụ: có thể có giá trị mặc định có thể bỏ qua), hãy đặt tùy chọn: 'foo (a,? B)'. Bạn cũng có thể xem xét DU, nếu dữ liệu của bạn có thể được đại diện theo cách này. Nếu không, tôi sẽ chỉ sử dụng hai chức năng. – bytebuster