我想出一種方法在scala中的某個現有類中定義新方法。將方法注入到現有類中
例如,我認爲asInstanceOf[T]
方法有太長的名字,我想as[T].
一個直接的方法來替代它可以是:
class WrappedAny(val a: Any) {
def as[T] = a.asInstanceOf[T]
}
implicit def wrappingAny(a: Any): WrappedAny = new WrappedAny(a)
有沒有一種更自然的方式與少代碼?
scala> class A
defined class A
scala> implicit def toA(x: Any): A = x
toA: (x: Any)A
scala> toA(1)
和控制檯掛起:
此外,當我嘗試這一個奇怪的事情發生了。看起來toA(Any)
不應該通過類型檢查階段,並且當它不是隱含的時候它不能通過。將所有代碼放入外部源代碼可能會產生相同的問題。這怎麼發生的?它是編譯器(版本2.8.0)的錯誤嗎?
哇!這真太了不起了。你是怎麼想出這個想法的?而且,asInstanceOf [T]僅僅是一個例子。我只是好奇,是否有任何語法糖果在一般情況下工作。 – 2010-11-20 14:40:56
作爲一般規則,如果代碼中存在明顯的類型錯誤,但編譯器接受它,則存在工作中的隱式轉換......以及它掛起的事實是主要線索:) – 2010-11-20 19:24:23