Có cách nào để gọi hàm Scala có tham số riêng lẻ không, cho một mảng (tương tự như JavaScript Spreads trong ECMAScript 6)?Tham số 'Spread' trong Scala?
ys = [10.0, 2.72, -3.14]
f(x, ...ys);
Cú pháp sạch sẽ là:
f(1, ys)
nhưng điều đó không xuất hiện để thực hiện được. Thậm chí f(1, ys:_*)
không hoạt động (và cũng không f(ys:_*)
, vì trình biên dịch báo cáo quá ít tham số - chỉ có thông số đầu tiên được điền).
Ví dụ:
def f (a:Int, b:Float, c:Float, d:Float): String
val x = 1
val ys = List(10.0, 2.72, -3.14) // note: non-Objects
val result = f(x, ys) // intuitive, but doesn't work
Trường hợp sử dụng: tiêm dữ liệu thử nghiệm (từ bộ sưu tập) vào các phương pháp hiện có chấp nhận các thông số cá nhân. Vì đây là những trường hợp thử nghiệm, nó hoàn toàn ổn nếu #params trong y không khớp và điều này cho phép lỗi thời gian chạy hoặc kết quả không chính xác.
Câu hỏi đặt ra là liệu Scala có cho phép cú pháp rõ ràng để gọi một hàm có tham số riêng lẻ hay không, cho dù đó là thiết kế tốt (mặc dù ý kiến chắc chắn được chào đón).
Điều gì sẽ xảy ra nếu 'ys' có ít hơn 3 thành phần trở lên? – huynhjl
Quá tải hàm 'f' là những gì bạn nghĩ đến. Điều đó sẽ cho phép bạn gọi hàm theo cách bạn đã cung cấp, nhưng nó sẽ thất bại trong các tình huống khác –