Tôi đã có một lỗi lạ ngày hôm qua rằng tôi cuối cùng đã giảm xuống còn đoạn mã sau:Bất ngờ hành vi với implicits
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have them evaluated.
Type :help for more information.
scala> class X extends Function[String, Int] { def apply(x: String) = Integer.parseInt(x) }
defined class X
scala> implicit val x = new X
x: X = <function1>
scala> "56"/2
res2: Int = 28
Tôi hy vọng điều này để ném một ngoại lệ, vì String không có một phương pháp /
. Thay vào đó, Scala coi biến ngầm là một phương thức ngầm (vì nó thực hiện Function[String,Int]
) và chuyển đổi chuỗi "56" thành số nguyên 56.
Cách này hoạt động? Dựa trên các quy tắc tìm kiếm tiềm ẩn, tôi không nghĩ rằng các biến tiềm ẩn hoạt động như các hàm sẽ được xem xét.
Thông báo tốt, cảm ơn. – Odomontois
Trên thực tế, một chuyển đổi 'ngầm định' hoạt động bởi vì nó được tự động chuyển thành một giá trị hàm (đó là _eta expand_). –