Распознать вызовы сеттера

У меня есть приложение, где некоторые значения переменных должны быть опубликованы в очереди сообщений при изменении. То есть, если вызывается установщик var, я хочу, чтобы это как-то было замечено, и после установки нового значения я хочу, чтобы оно было опубликовано в MQ.

Некоторое время назад я сделал что-то подобное с Perl/Moose, установив модификатор after (выполняя публикацию) для методов с определенным атрибутом метода. Это решение было очень элегантным и не требовало синтаксических накладных расходов, кроме дополнительного атрибута метода.

Что было бы хорошим решением, используя возможности Scala (2.10) без использования неуклюжих шаблонов OO?

Обновление: я хотел бы добиться, чтобы код выглядел примерно так:

@Publishable var someProperty = 42

или же

domainSpecificLanguageMagic someProperty = 42

Одна из проблем заключается в том, что эти свойства могут быть отражательно установлены, поэтому метод установки с другим именем (вероятно?) Не является опцией.

2 ответа

Вы можете сделать свойство частным (и дать ему имя варианта) и определить его методы доступа и мутатора:

class C1(...) {
  private var iProp: Int = 0

  def prop: Int = iProp

  /* Put additional logic associated with mutation here: */
  def prop_=(newProp: Int): Unit = iProp = newProp
}

Я предполагаю, что путь к виртуализации - это scala: в нем есть несколько встроенных примитивов, которые позволяют вам изменять семантику языка, включая назначение. Это не стоковая версия Scala , но она официально поддерживается, и новый релиз обычно выходит не слишком поздно после обычного (в течение нескольких недель). (Я перепутал это с другим фреймворком Scala - LMS, AFAIS, он не поддерживается довольно хорошим банкоматом, но все же должен решить вашу проблему)

Другие вопросы по тегам