Есть ли способ удалить черту из экземпляра в Scala? - PullRequest
4 голосов
/ 19 августа 2011

Хотелось бы знать, возможно ли иметь экземпляр, к которому была добавлена ​​черта, во время выполнения, можно удалить черту с экземпляра, чтобы она могла вести себя как изначально.

Ответы [ 2 ]

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

Черты объединяются с классами во время компиляции. Поэтому невозможно добавлять / удалять черты во время выполнения.

Для вашего конкретного случая рассмотрите возможность добавления метода в ваш класс:

class Foo(val a: Object, val b: Object, ...) {
  def original() = new Foo(a, b, ...)
}

Затем вы можете позвонить instance.original(), чтобы получить копию вашего объекта, на которую не влияют никакие черты.

3 голосов
/ 20 августа 2011

Это невозможно.Этот экземпляр относится к классу, частью которого является код признака.

Если бы JVM поддерживала что-то вроде «класса + признаки», то теоретически можно было бы это вернуть.

...