4

DSL の次の式で括弧/括弧を削除できるようにしたいと考えています。

substitute ("hello {0}" using "world")

コードの残りの部分は次のようになります。

class Rule(format: String) {
  def using(arggs: String*): Rule = { /* save the args */ return this }
  def execute() = { /* substitute params */ }
}

def substitute(rule: Rule) = rule.execute()
implicit def makeRule(format: String) = new Rule(format)

apply() メソッドを試してみましたが、そのようにはできないと思います。私が使用できるscalaマジックはありますか?

4

2 に答える 2

3

.Scala には、および(...を省略したい場合に、iamb / iambic メーターに相当する独自のものがあります (必要に応じて) )

ターゲット(スキップ.)メソッド(スキップ() singleArgument (スキップ))

singleArgumentはオプションです

ドットのない、括弧のない DSL っぽいものはすべて、このパターンに適合する必要があります。これが、Scala の内部 DSL が往々にして堅苦しいものになっている理由です。

于 2013-03-08T22:05:43.767 に答える