Функция с переменными в конструкторе
Я пытаюсь заставить это работать в Scala:
class MyClass(some: Int, func: AnyRef* => Int) {
}
Вышеприведенный код не скомпилируется (почему?), Но следующее делает:
class MyClass(some: Int, func: Seq[AnyRef] => Int) {
}
Это нормально, но два эквивалента? И если так, то как я могу тогда использовать func
внутри MyClass
?
1 ответ
Решение
Первый (с 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
}
}