Tại sao phương pháp ngầm ẩn sau không được áp dụng? Và làm thế nào tôi có thể đạt được để tự động chuyển đổi một thể hiện của X
thành một thể hiện của Y
trong khi có một phạm vi ngụ ý Conversion[X,Y]
.Chuyển đổi ngầm định không hoạt động
trait Conversion[X, Y] {
def apply(x: X): Y
}
implicit object Str2IntConversion extends Conversion[String, Int] {
def apply(s: String): Int = s.size
}
implicit def convert[X, Y](x: X)(implicit c: Conversion[X, Y]): Y = c(x)
val s = "Hello"
val i1: Int = convert(s)
val i2: Int = s // type mismatch; found: String required: Int
Đối với dòng cuối cùng để làm việc, bạn cần một chuyển đổi ngầm từ 'chuỗi' cho' Int' , ví dụ 'ngầm [String => Int]' - không tồn tại. Vấn đề ở đây là 'Y' là một tham số, và Scala sẽ không chỉ thay thế cho bất kỳ kiểu nào bạn đang tìm kiếm. Ví dụ, 'implicit def convert [X] (x: X) (ngầm định c: Conversion [X, Int]): Int = c (x)' sẽ hoạt động. –