内部函数我有一个地图,我想创造这样的:调用存储的地图
val mapCastMethods = Map("Integer" -> toInt)
然后,我想打电话给repviously随地图存储的方法。 类似于:
"345".mapCastMethods("Integer")
我该怎么做?
内部函数我有一个地图,我想创造这样的:调用存储的地图
val mapCastMethods = Map("Integer" -> toInt)
然后,我想打电话给repviously随地图存储的方法。 类似于:
"345".mapCastMethods("Integer")
我该怎么做?
我觉得这样的事情应该工作:
val toInt = (x: String) => x.toInt
val mapCastMethods = Map("Integer" -> toInt)
val res = mapCastMethods("Integer")("345") // [EDIT] Same as val res= mapCastMethods.get("Integer").get(("345"))
println(res) // 345
你应该定义函数字面toInt FUNC :)的
type Cast[A, X] = A => X
type CastMethods[K, A, X] = Map[K, Cast[A, X]]
implicit def cast[K, A, X](implicit methods: CastMethods[K, A, X]):
K => A => X
= k => a => methods(k)(a)
然后用法:
sealed trait CastMethod
case object Integer extends CastMethod
implicit val methods: CastMethods[CastMethod, String, Int]
= Map(Integer -> (_ : String).toInt)
cast.apply(Integer)("345")
这是一个很好的抽象,但是如果你想从例如将'Set'设置为'List'?你的类型参数'X'已经绑定到'Int'。 你是否需要声明一个更隐含的val,每次新演员都会实例化一个带有单个元素的新“Map”? –
我想我明白了。这将是'隐式val方法:CastMethods [CastMethod,Any,Any] = Map(Integer - >(_:String).toInt,Set - >(_:Set).toList)' –
这是确定的,但可能会有点优化:'val结果:Int = mapCastMethods(“Integer”)(“345”)' –
当然是啊:) – elarib
我正在为scala中的关系运算符解决同样的问题。很高兴知道这个方法 –