我怎样才能使用Scala代码更像英语?

时间:2014-04-20 00:14:06

标签: scala dsl

我在下面有一个Scala程序:

object Fun extends App {
  class kid {
    def on = new kid
    def the(block: => Unit) = { block; "Scala is awesome!" }
  }

  println((new kid on) the {})
}

println((new kid on) the {})行打印:

Scala is awesome!

如何在Scala中使用此行更加英语?

编辑:@Erik Allik的另一种方法:

object Fun extends App {
  class kid {
    def onThe(block: => Unit) = { block; "Scala is awesome!" }
  }
  println(new kid onThe {})
}

2 个答案:

答案 0 :(得分:1)

我认为如果没有parens,你就无法完成这项工作;如果没有它们,后缀调用将导致歧义。我只是接受这样一个事实,即在大多数非平凡的情况下,大多数时候你不能像句子结构那样达到完整的英语,并使用onThe或跳过the部分的解决方法和制作on中缀。

'所述'无论如何都是不需要的,因为无论你是指一个预先存在的名字(或),还是一个新名称,即自由变量(a),它都可以从上下文中静态地推断出来。

另外,除非是竞争对手,否则我甚至认为获得100%英语句子非常重要或有用。在实践中,实际上它可能会使事情的可读性降低,而且会更加复杂。如果您确实需要像DSL这样的自然语言,请使用Scala强大的解析器组合器定义新的语言语法。您甚至可以编写一个Eclipse插件来语法突出显示您的自定义DSL。

答案 1 :(得分:1)

这可能会略微提高可读性。 一个常见的习惯用法是使用伴侣对象来摆脱 new 。 如果您可以使用添加的,您可以删除一些额外的括号。

object Fun extends App {

  class Kid() {
    def the(block: => Unit) = { block; "Scala is awesome!" }
  } 

  object Kid {
    def on = new Kid()
  }

}

然后你可以用这种方式调用你的函数:

scala> println ( Kid.on the {} )
Scala is awesome!