tôi đã viết một lớp mà chấp nhận một varargs như một tham số, và chỉ định mặc định của nó để người dùng thường có thể nhanh chóng nó mà không chỉ định một tham số:Tại sao không thể chỉ định giá trị mặc định của tham số Varala varargs?
class MyClass(values: Int* = 42) { }
Tuy nhiên, trình biên dịch và REPL cho tôi các lỗi sau đây :
<console>:7: error: type mismatch;
found : Int(42)
required: Int*
class MyClass(values: Int* = 42) { }
^
<console>:7: error: a parameter section with a `*'-parameter is not allowed to have default arguments
class MyClass(values: Int* = 42) { }
là một workaround, tôi đã thử sau đây, nhưng nó đã không làm việc một trong hai: (. nó rất mơ hồ rõ ràng)
class MyClass(value: Int = 42, otherValues: Int*) { }
Tôi tự hỏi tại sao nó không được phép có mặc định cho tham số varargs. Lý do kỹ thuật hoặc lý luận nằm dưới đây là gì? (Tôi đoán là chỉ định một varargs trống sẽ yêu cầu một số cú pháp đặc biệt hoặc thành ngữ, nhưng tôi không chắc chắn nếu đây là một lý do đủ.)
Tại sao 'def foo (kết quả: Int = 0, xs: String *) = ???' không được chấp nhận? Nó hoàn toàn khả thi cho trình biên dịch để nhận ra 'foo (0," không thể biên dịch ")' như là một công trình pháp lý. –
@ om-nom-nom, không chắc tôi theo bạn.Tôi trả lời lý do tại sao chúng tôi có thể không muốn hỗ trợ 'def foo (kết quả: Int = 0, xs: String * = Seq (" một số "," mặc định ")) = ???'. – huynhjl
yep, nhưng trình biên dịch đặt cùng giới hạn trong trường hợp của tôi (ít nhất là cho chúng ta cùng một lỗi biên dịch), vì vậy tôi đoán có thể có một số lý do khác hợp nhất hai trường hợp đó –