我在下面有一个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 {})
}
答案 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!