【发布时间】:2012-01-08 09:11:15
【问题描述】:
因此,我一直在尝试解决您可以在 Scala 中定义内容的各种方式,因为我对 {} 块的处理方式缺乏了解,这使情况变得复杂:
object NewMain extends Thing{
def f1 = 10
def f2 {10}
def f3 = {10}
def f4() = 10
def f5() {10}
def f6() = {10}
def f7 = () => 10
def f8 = () => {10}
def f9 = {() => {10}}
def main(args: Array[String]){
println(f1) // 10
println(f2) // ()
println(f3) // 10
println(f4) // 10
println(f4()) // 10
println(f5) // ()
println(f5()) // ()
println(f6) // 10
println(f6()) // 10
println(f7) // <function0>
println(f7()) // 10
println(f8) // <function0>
println(f8()) // 10
println(f9) // <function0>
println(f9()) // 10
}
}
大概其中一些是等价的,其中一些是对其他人的句法糖,还有一些是我不应该使用的东西,但我终生无法弄清楚。我的具体问题是:
println(f2)和println(f5())怎么会给出unit?块中的最后一项不是10吗?它与println(f3())有什么不同,它给出了10?如果
println(f5)给出unit,那么println(f5())不应该是无效的,因为unit不是函数吗?这同样适用于println(f6)和println(f6())在所有打印 10 的人中:
f1,f3,f4,f4(),f6,f6(),f7(),f8(),f9(), 它们之间是否有任何功能差异(就它的作用而言)或使用差异(就我何时应该使用哪个而言)?还是它们都等价?
【问题讨论】:
-
我认为标题有点误导,因为它暗示有 有 9 种方法来定义方法。没有。这就像说你可以通过 57 种方式找到
a + b:(a + b)、a; b、(a) + b、a + (b)、(a + (b))、(a) - b……其中一些是错误的,所有这些都是不必要的复杂。 -
讽刺的是,
f10是正确的方式。