意外行爲我昨天有一個奇怪的錯誤,我最終淪爲下面的代碼:與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
我預計這將拋出一個異常,因爲字符串沒有一個/
方法。相反,Scala將隱式變量作爲隱式方法處理(因爲它實現Function[String,Int]
)並將字符串「56」轉換爲整數56.
這是如何工作的?基於隱式搜索的規則,我並不認爲會考慮作爲函數的隱式變量。
尼斯通知,謝謝。 – Odomontois 2012-03-07 18:10:05
實際上,一個'隱含def'轉換的工作原理是因爲它會自動轉換成一個函數值(這就是_eta expansion_)。 – 2012-03-07 20:17:26