Если вы хотите, чтобы функции были каррированы, следующий способ, вероятно, является наиболее кратким способом сделать это.
scala> val ops: Map[String, Int => Int => Int] = Map(
| "+" -> (x => y => x + y),
| "-" -> (x => y => x - y)
| )
ops: Map[String,Int => Int => Int] = Map(+ -> <function1>, - -> <function1>)
Эта карта, однако, ограничена Int
с. Если вы хотите общие операции, вам придется использовать Numeric
привязанный к контексту.
scala> def ops[N : Numeric]: Map[String, N => N => N] = {
| import Numeric.Implicits._
| Map(
| "+" -> (x => y => x + y),
| "-" -> (x => y => x - y)
| )
| }
ops: [N](implicit evidence$1: Numeric[N])Map[String,N => N => N]
Основным предостережением при таком подходе является то, что карта создается каждый раз, когда вы звоните ops
.