Tôi đang gặp khó khăn trong việc giải thích sự khác biệt về hành vi giữa các giá trị tiềm ẩn bổ sung bằng một giá trị tiềm ẩn chính hoặc một chuyển đổi ẩn ngụ ý . Cụ thể, công trình này:Tại sao Scala không tìm thấy giá trị ngầm thứ hai trong trường hợp cụ thể này?
trait Foo[A]
implicit def fooString: Foo[String] = null
implicit def value[A](implicit foo: Foo[A]) = 5
> implicitly[Int]
5
Nhưng điều này không:
implicit def conversion[A](x: Int)(implicit foo: Foo[A]) = new {
def aMethod = 5
}
> 1.aMethod
could not find implicit value for parameter foo: test.Foo[A]
khác nhau:
- Cho dù việc tìm kiếm được bắt đầu bởi
implicitly
hay một chuyển đổi ngầm - Cho dù ngầm thứ giá trị sau khi tìm kiếm là đa hình
- Dù giá trị tiềm ẩn thứ cấp là đa hình
tôi nhận được kết quả như sau:
Conversion/value Searching for Supplied | Works?
---------------- ------------- -------- | ------
conversion poly poly | yes
conversion poly mono | **no**
conversion mono poly | yes
conversion mono mono | yes
value poly poly | yes
value poly mono | yes
value mono poly | yes
value mono mono | yes
Như bạn thấy, trường hợp duy nhất mà không hoạt động được khi tìm kiếm được bắt đầu bởi một chuyển đổi ngầm, giá trị được tìm kiếm là đa hình, nhưng giá trị được cung cấp là đơn hình.
Có lý do lý thuyết nào giải thích tại sao điều này xảy ra hay đây là lỗi /giới hạn của Scala?
Câu trả lời đúng, câu hỏi sai ;-) –