Могу ли я передать произвольную функцию другой функции в Scala?

Я новичок в Scala, и возможность передавать функции другим функциям довольно удобно - но могу ли я передать произвольную ссылку на функцию другому функция? Арность указанного функционального параметра будет фиксированной (при этом мне также любопытно, можно ли передать функцию с произвольной арностью). Я все время спотыкаюсь о типовых ошибках. Я пробовал использовать Any , но, похоже, это не помогает.

Например, у меня есть код ниже:

class CodeRunner(val user_defined: (Int) => Unit) {
  def run(input: Int) = {
    user_defined(input)
  }
}

def arbitrary_code(input: Int) = { println("Running with input " + input) }

val d1 = new CodeRunner(arbitrary_code)

d1.run(4)

И я получаю:

Running with input 4

Теперь допустим, что я хочу вместо этого передайте следующую функцию:

def arbitrary_code(input: String) = { println("Running with input " + input) }

Как изменить мой класс CodeRunner для обработки обоих?

7
задан Don Stewart 14 June 2011 в 19:59
поделиться