Распознать вызовы сеттера
У меня есть приложение, где некоторые значения переменных должны быть опубликованы в очереди сообщений при изменении. То есть, если вызывается установщик 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, он не поддерживается довольно хорошим банкоматом, но все же должен решить вашу проблему)