Scala 调用存储在映射中的函数

Scala 调用存储在映射中的函数,scala,Scala,我有一张地图,我想这样创建: val mapCastMethods = Map("Integer" -> toInt) 然后我想调用与map一起存储的方法。 比如: "345".mapCastMethods("Integer") 我该怎么做呢?我认为这样做应该可行: val toInt = (x: String) => x.toInt val mapCastMethods = Map("Integer" -> toInt) val res = mapCas

我有一张地图,我想这样创建:

val mapCastMethods = Map("Integer" -> toInt)
然后我想调用与map一起存储的方法。 比如:

"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:)的函数文字。

我认为这样应该可以:

  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的函数文字:)

然后使用:

sealed trait CastMethod
case object Integer extends CastMethod
implicit val methods: CastMethods[CastMethod, String, Int] 
  = Map(Integer -> (_ : String).toInt)

cast.apply(Integer)("345")
然后使用:

sealed trait CastMethod
case object Integer extends CastMethod
implicit val methods: CastMethods[CastMethod, String, Int] 
  = Map(Integer -> (_ : String).toInt)

cast.apply(Integer)("345")

这没问题,但可以稍微优化一下:
val结果:Int=mapCastMethods(“Integer”)(“345”)
我刚才在scala中为关系运算符解决了同样的问题。很高兴知道这个方法没问题,但是可以稍微优化一下:
val结果:Int=mapCastMethods(“Integer”)(“345”)
我刚才在scala中为关系运算符解决了同样的问题。很高兴知道这个方法这是一个很好的抽象,但是如果您想添加一个从
Set
List
的转换呢?您的类型参数
X
已绑定到
Int
。您是否需要再声明一个隐式val,并且每次为新的cast实例化一个新的
Map
,其中只有一个元素?我想我理解。这将是
隐式val方法:CastMethods[CastMethod,Any,Any]=Map(Integer->(u:String).toInt,Set->(:Set).toList)
这是一个很好的抽象,但是如果你想将一个cast从
集添加到
列表
?您的类型参数
X
已绑定到
Int
。您是否需要再声明一个隐式val,并且每次为新的cast实例化一个新的
Map
,其中只有一个元素?我想我理解。它将是
隐式val方法:CastMethods[CastMethod,Any,Any]=Map(Integer->(u:String).toInt,Set->(:Set).toList)