我正在使用Scala构建DSL,我有这样一个对象:
object block {
def apply(content: String): String = "{\n" + content + "}\n"
def apply(): String = block("empty block")
}
Run Code Online (Sandbox Code Playgroud)
所以以后在我的DSL中我可以说:
block {
"good stuff goes here"
}
Run Code Online (Sandbox Code Playgroud)
没关系,但apply()我想用第二种方法让用户写空块,以便以后填写.但是编译器不允许apply()用花括号调用无参数方法...除了使用括号之外还有什么办法吗?如果不是,那为什么不允许这样做?
更新:供参考:两个答案应合并为全图.
您可以让它采用Unit被忽略的类型参数,而不是没有任何参数的apply方法:
def apply(ignored: Unit) = "{\n}\n"
Run Code Online (Sandbox Code Playgroud)
然后你就可以写了
block {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |