Функция с переменными в конструкторе

Я пытаюсь заставить это работать в 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
  }
}
Другие вопросы по тегам