识别setter调用

时间:2013-11-12 13:11:38

标签: scala setter publisher

我有一个应用程序,其中一些var值应该发布到更改上的消息队列。也就是说,如果调用var的setter,我希望以某种方式注意到这一点,并且在设置新值之后,我希望将它发布到MQ。

我不久前用Perl / Moose通过在具有特定方法属性的方法上设置后修饰符(进行发布)来做类似的事情。该解决方案非常优雅,除了附加的方法属性外,不需要语法开销。

使用Scala(2.10)功能而不使用笨拙的OO模式会有什么好处?

更新:我想要实现的是代码看起来像这样:

@Publishable var someProperty = 42

domainSpecificLanguageMagic someProperty = 42

其中一个挑战是这些属性可能会被反射设置,因此具有不同名称的setter方法(可能是?)不是一个选项。

2 个答案:

答案 0 :(得分:0)

我想要走的路是scala virtualized:它有一些内置的原语,允许你改变语言语义,包括赋值。它不是股票scala ,但是它得到了官方的支持,并且新版本通常在普通的版本之后(在几周之内)不会太晚。(我把它与另一个scala框架混淆了 - LMS,AFAIS不支持相当不错的ATM,但仍应解决您的问题)

答案 1 :(得分:0)

您可以将该属性设为私有(并为其指定变体名称)并定义其accessor和mutator方法:

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
}