可以在创建后修改Scala类吗?

时间:2011-08-01 07:25:07

标签: scala

具体来说,我在考虑6.3的等效功能:

http://www.siafoo.net/article/52

2 个答案:

答案 0 :(得分:5)

Scala是一种静态语言,因此所有代码都应该在编译时存在。但是,您可以使用Pimp-My-Library方法模拟python功能,以便将方法添加到现有类,而无需修改类本身。但是,您无法更改现有方法。例如:

class Foo( val i: Int )

class RichFoo( f: Foo ) {
  def prettyPrint = "Foo(" + i + ")"
}

implicit def enrichFoo( f: Foo ) = new RichFoo(f)

val foo = new Foo( 667 )

println( foo.prettyPrint ) // Outputs "Foo(667)"

答案 1 :(得分:4)

你可以做到

class Class {
  var method = () => println("Hey, a method (actually, a function bound to a var)")
}

val instance = new Class()
instance.method()
// Hey, a method (actually, a function bound to a var)

val new_method = () => println("New function")
instance.method = new_method

instance.method()
// New function

创建实例后,无法更改方法本身。