Scala - `apply()`不带参数方法和调用时的曲线括号

non*_*com 4 dsl scala

我正在使用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()用花括号调用无参数方法...除了使用括号之外还有什么办法吗?如果不是,那为什么不允许这样做?

更新:供参考:两个答案应合并为全图.

Kim*_*bel 6

您可以让它采用Unit被忽略的类型参数,而不是没有任何参数的apply方法:

def apply(ignored: Unit) = "{\n}\n"
Run Code Online (Sandbox Code Playgroud)

然后你就可以写了

block {}
Run Code Online (Sandbox Code Playgroud)