これをScalaで機能させようとしています:
class MyClass(some: Int, func: AnyRef* => Int) {
}
上記のコードはコンパイルされませんが (なぜですか?)、次のコードはコンパイルされます。
class MyClass(some: Int, func: Seq[AnyRef] => Int) {
}
それはOKですが、2つは同等ですか?もしそうなら、どうすればfunc
内部で使用できMyClass
ますか?
これをScalaで機能させようとしています:
class MyClass(some: Int, func: AnyRef* => Int) {
}
上記のコードはコンパイルされませんが (なぜですか?)、次のコードはコンパイルされます。
class MyClass(some: Int, func: Seq[AnyRef] => Int) {
}
それはOKですが、2つは同等ですか?もしそうなら、どうすればfunc
内部で使用できMyClass
ますか?
最初のもの (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
}
}