【发布时间】:2016-08-15 05:52:53
【问题描述】:
假设我想存储一个Map[String, Function1],其中 Function1 的参数和返回类型可以变化。我将如何将Function1[String, String] 和Function1[Int, Int] 存储在同一个地图中。
我尝试过Function1[AnyRef, AnyRef],但Function1[String, String] 不是Function1[AnyRef, AnyRef],因此无法编译。
【问题讨论】:
-
我认为你不能以类型安全的方式做到这一点
-
你能存储一个ADT,即
sealed trait MyFn | case class Fn1(f: Int => Int) extends MyFn | case class Fn2(f: String => String)吗?然后,对Map#get结果进行模式匹配,即Option[MyFn]。 -
要编译的类型是
Nothing => Any,它可以接受任何函数。见val f: Nothing => Any = (a: String) => a.toInt