Clojure 提供了一个宏调用doto
,它接受它的参数和一个函数列表,并在本质上调用每个函数,前置(评估的)参数:
(doto (new java.util.HashMap) (.put "a" 1) (.put "b" 2))
-> {a=1, b=2}
有没有办法在 Scala 中实现类似的东西?我设想具有以下形式的东西:
val something =
doto(Something.getInstance) {
x()
y()
z()
}
这将相当于
val something = Something.getInstance
something.x()
something.y()
something.z()
可以使用scala.util.DynamicVariable
s吗?
请注意,对于工厂方法,例如Something.getInstance
,不可能使用常见的 Scala 模式
val something =
new Something {
x()
y()
z()
}