Scala奇怪的功能与foreach。预期的行为与否?

时间:2011-08-10 01:34:59

标签: scala

    def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i))

正确编译但不会在屏幕上打印任何内容。这是我的一个错字,但我很惊讶它编译完毕。

    def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i))
    println("--")
    list

将输出显示为

   --
   5
   4
   3
   2

所以列表在这种情况下已成为一种功能?这就是我通过输出推断它不是我预期的

3 个答案:

答案 0 :(得分:3)

是的,list实际上是一种不带参数的方法。这个定义之间需要注意的关键区别是简单地使它成为val,每次使用它时都会对它进行评估,因此每次引用list时,都会打印输出。

正如下面的评论所指出的,将其命名为list可能会产生误导,因为foreach的返回类型为Unit。无论你如何声明list,情况都是如此。

答案 1 :(得分:1)

在这种情况下,您始终可以显式为值写入类型,并看到编译器抱怨类型不匹配。

答案 2 :(得分:0)

方法定义不执行该方法。你也必须调用这个方法。