【发布时间】:2014-08-20 22:55:59
【问题描述】:
我有一些数据源需要在事务中包装操作,这有两种可能的结果:成功和失败。这种方法引入了相当多的样板代码。我想做的是这样的(失败也是如此(可能是@txFailure)):
@txSuccess(dataSource)
def writeData(data: Data*) {
dataSource.write(data)
}
其中@txSuccess 是一个宏注解,处理后会产生这样的结果:
def writeData(data: Data*) {
val tx = dataSource.openTransaction()
dataSource.write(data)
tx.success()
tx.close()
}
如您所见,这种方法非常有用,因为在此示例中,由于是样板代码,可以消除 75% 的代码。
这可能吗?如果是的话,你能给我一个正确的方向吗?如果没有,您可以推荐什么来实现这样的目标?
【问题讨论】:
-
简短回答:是的,可以从
macroApplication中读取注释参数。我知道我在某个地方有一个老例子,我会在有时间的时候发布。 -
@TravisBrown,我想我可以在几个小时内发布我的解决方案,所以请稍等一下吗?在确定自己无法完成之前,我不希望自己监督解决方案 :)
-
@TravisBrown,这是我的 github 仓库:github.com/cdshines/txMacro。你能不能好心看看我做了什么,也许可以为我提供一些有用的 cmets/remarks? (除了我已经在我的 TODO 中的那个)
-
这对我来说看起来不错,尽管我会使用准引号而不是
DefDef的东西。另外c.prefix让我们比c.macroApplication更简洁一点——抱歉我之前忘记了。 -
具体来说,
c.prefix.tree.tail应该给你参数。
标签: scala scala-macros scala-macro-paradise