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)