1

これをScalaで機能させようとしています:

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

上記のコードはコンパイルされませんが (なぜですか?)、次のコードはコンパイルされます。

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

それはOKですが、2つは同等ですか?もしそうなら、どうすればfunc内部で使用できMyClassますか?

4

1 に答える 1

3

最初のもの (varargs を使用) は、括弧を使用すると機能します。

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

ただし、の 2 つの形式はfunc同じではありません。最初のバージョンは vararg 入力を受け取るので、 like と呼びますfunc(a,b,c,d)が、2 番目のバージョンはSeqを入力として受け取るので、 like と呼びます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
  }
}
于 2012-06-22T14:08:02.323 に答える