将方法添加到Scala中的列表

时间:2013-06-06 21:30:31

标签: scala

我对Scala很新,我想在列表中添加一个函数。我有以下内容:

  var l2: List[() => Unit] = List()
  def foo() {
    println("In foo")
  }

现在我想在列表中添加一个方法。

() => println("x") :: l2

它编译但在运行时不起作用。

下一个问题:为什么不进行以下编译?

l2 = foo :: l2

感谢。

2 个答案:

答案 0 :(得分:1)

这不是正确的语法

() => println("x") :: l2

正确的是

(() => println("x")) :: l2

以及为什么l2 = foo :: l2无法编译是因为foo的类型不符合l2以深入理解它

foo.toString

但是将编译以下内容

var fn = {() => println("y")}
l2 = fn :: l2

foo _ :: l2

答案 1 :(得分:0)

首先,() => println("x") :: l2被解释为() => (println("x") :: l2)。这是一个不带参数的函数,返回List[Any](在类型推断之后)。

正如@dursun所说,你想写:

(() => println("x")) :: l2

此外,l2 = foo :: l2无法编译,因为Scala希望您明确说明,如果您使用函数值而不是应用它(基本上是为了保护程序员不被滥用)。使用:

foo _ :: l2