xem xét như sau:Scala đặt tên và đối số mặc định kết hợp với các thông số ngầm
def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Biểu thức cuối cùng gây ra các lỗi sau:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.
Tuy nhiên, nếu bạn cung cấp một giá trị mặc định cho tiềm ẩn thông số a, không có vấn đề:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Nhưng dòng cuối cùng in s
haha!: 2
trong khi tôi lại có thể ngờ
size: 2
Vì vậy, giá trị tiềm ẩn 's' không nhặt. Nếu bạn thay vì không cung cấp bất kỳ thông số f và chỉ cần gọi
println(f)
thì giá trị tiềm ẩn được nhặt và bạn nhận
size: 0
Ai đó có thể làm sáng tỏ về những gì đang xảy ra ở đây?
Bạn nên kiểm tra mà ngầm phạm vi mà ngầm đang sử dụng. Tôi không nghĩ nó giống như lựa chọn thứ hai. – jsuereth