在构造函数中使用varargs的函数

时间:2012-06-22 13:43:48

标签: scala variadic-functions first-class-functions

我想在Scala中使用它:

class MyClass(some: Int, func: AnyRef* => Int) {
}

上面的代码不会编译(为什么?)但是以下代码:

class MyClass(some: Int, func: Seq[AnyRef] => Int) {
}

那没关系,但这两个是等价的吗?如果是这样,那么我如何在func内使用MyClass

1 个答案:

答案 0 :(得分:3)

如果您使用括号,第一个(使用varargs)可以工作:

class MyClass(some: Int, func: (AnyRef*) => Int)

func的两种形式却不尽相同。第一个版本采用vararg输入,因此您可以将其称为func(a,b,c,d),但第二个版本将Seq作为输入,因此您可以将其称为func(Seq(a,b,c,d))

比较一下:

class MyClass(some: Int, func: (AnyRef*) => Int) {
  def something() = {
    func("this","and","that") + 2
  }
}

到此:

class MyClass(some: Int, func: Seq[AnyRef] => Int) {
  def something() = {
    func(Seq("this","and","that")) + 2
  }
}