2011-10-31 36 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,在只要隐含在范围内。

这将在大多数情况下工作,除非你的特质具有自我类型。