Можно ли изменять классы Scala после создания? - PullRequest
3 голосов
/ 01 августа 2011

В частности, я думал об эквивалентной функциональности для 6.3 здесь:

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

Ответы [ 2 ]

5 голосов
/ 01 августа 2011

Scala - это статический язык, поэтому весь код должен существовать во время компиляции. Однако вы можете смоделировать функцию python, используя подход Pimp-My-Library для добавления методов в существующий класс, без изменения самого класса. Однако вы не можете изменить существующий метод. Пример:

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)"
4 голосов
/ 01 августа 2011

Вы могли бы сделать

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

Сами методы нельзя изменить после создания экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...