Scala Function1通用参数和返回类型

时间:2016-04-21 20:17:06

标签: scala function types

假设我想存储Map[String, Function1],其中Function1的参数和返回类型可以变化。如何将Function1[String, String]Function1[Int, Int]存储在同一个地图中。

我已经尝试Function1[AnyRef, AnyRef],但Function1[String, String]不是Function1[AnyRef, AnyRef],因此无法编译。

2 个答案:

答案 0 :(得分:3)

如果您只有两种可能的值类型,则可以在Either中包装值:

val m = Map[String, Either[Int => Int, String => String]]()

如果您想存储两种以上的不同类型,请创建自己的包装,或使用Coproduct from shapeless之类的内容。

答案 1 :(得分:2)

这看起来像你之后的那样吗?

scala> val m = Map[String, Function1[_,_]]()
m: scala.collection.immutable.Map[String,Function1[_, _]] = Map()

scala> val f1 = (i:Int) => i*3
f1: Int => Int = <function1>

scala> val f2 = (b: Boolean) => if (b) "YES" else "NO"
f2: Boolean => String = <function1>

scala> m + ("xcx" -> f2) + ("rtr" -> f1)
res59: scala.collection.immutable.Map[String,Function1[_, _]] = Map(xcx -> <function1>, rtr -> <function1>)