2

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

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

在不使用笨拙的 OO 模式的情况下,使用 Scala (2.10) 功能的好的解决方案是什么?

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

@Publishable var someProperty = 42

或者

domainSpecificLanguageMagic someProperty = 42

挑战之一是这些属性可能是反射设置的,因此具有不同名称的 setter 方法(可能?)不是一种选择。

4

2 回答 2

0

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

于 2013-11-12T14:14:23.673 回答
0

您可以将属性设为私有(并给它一个变体名称)并定义其访问器和修改器方法:

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
}
于 2013-11-12T14:23:59.577 回答