2011-10-31 41 views
2

Scala中有可能爲類實例創建一些混入嗎?Scala混入類實例

例如:我有一些MyClass的實例var x = new MyClass,我想它的某些方法或特質延伸,而不復制它。

[編輯:]
我期待它已被實例化後,以延長x的方式。 因此,例如在一個函數方法中,它將x作爲參數。

[背後是什麼]
我只是不知道是否有某種魔力與隱含對象和艙單,實現無需顯式調用隱式對象的類型類模式(像在Haskell)。 但只限於單個對象。

我知道,如果是人爲的,但我只是不知道是否是可能的,因爲很多的魔法與混合Scalas功能。

+1

你的意思是在*實例化之後,或者在*實例化之後,在'x' *上混合其他方法?它已被實例化之後的 –

+0

。 –

回答

0

這是不可能的。你可以看看使用Dynamic trait或凱文·賴特的auto-proxy plugin,但是,無論哪種方式,您將創建一個新對象也通過代理回答到原來的方法。

2

你的意思是像:

val x = new MyClass with MyTrait 

當然可以。顯然可以採用壓倒一切的方法:

val x = new MyClass { 
    override def myMethod = { my implementation } 
} 
+0

請格式化你的代碼... – paradigmatic

+0

感謝編輯:-) – aishwarya

+0

對不起遲到評論,但在這個問題後看看編輯 –

1

過這樣的問題就來了,因爲我想知道同樣的事情...

case class Person(name: String) 
val dave = Person("Dave") 
val joe = Person("Joe") 

trait Dog { val dogName: String } 
val spot = new Dog { val dogName = "Spot" } 

implicit def daveHasDog(p: dave.type) = spot 

dave.dogName //"Spot" 
joe.dogName //error: value dogName is not a member of Person 

所以現在dave實例(而不是Person類的所有實例)的行爲就像一個Person with Dog,在只要隱含在範圍內。

這將在大多數情況下工作,除非你的特質具有自我類型。