假设我想存储Map[String, Function1]
,其中Function1的参数和返回类型可以变化。如何将Function1[String, String]
和Function1[Int, Int]
存储在同一个地图中。
我已经尝试Function1[AnyRef, AnyRef]
,但Function1[String, String]
不是Function1[AnyRef, AnyRef]
,因此无法编译。
答案 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>)