«связывание» функций в Scala - PullRequest
0 голосов
/ 04 мая 2018

Допустим, у меня есть:

val sayHello: Int => Unit = {_ => println("hello")}
val sayHi: Int => Unit = {_ => println("hi")}

И такая функция, как foo:

val foo: Int => Unit = {
  sayHi
}   
foo(123) //= prints hi

Есть ли способ написать это:

val bar: Int => Unit = {
  i =>
    sayHello(i)
    sayHi(i)
}

без параметра i? чтобы я мог запустить и sayHi и sayHello?

Я ошибочно обнаружил в своем коде следующее:

val foo: Int => String = {
  sayHello
  sayHi
}

, но используется только последнее выражение, а sayHello не выполняется.

В общем, если бы эти функции возвращали что-то отличное от Unit, скажем, каков нелепый способ объединения этих функций, чтобы

val Hello: Int => String = {_ => "hello"}
val Hi: Int => String = {_ => "hi"}

Какая самая нелепая реализация функциональной панели:

def bar: Int => Seq[String]

такой, что:

bar(123) // returns List("hello","hi")

1 Ответ

0 голосов
/ 04 мая 2018

Как насчет:

def bar: Int => Seq[String] = i => Seq(Hello, Hi).map(_(i))

Для случая возврата функций Unit можно заменить map на foreach:

def bar: Int => Unit = i => Seq(Hello, Hi).foreach(_(i))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...