我是 Scala 的新手,我有以下问题。
def test() {
var mapObj = Map(1->'a',"Add"->((x:Int,y:Int)=>(x+y)))
mapObj("Add")
}
test()
如何使用参数 x:1 和 y:2 调用方法“Add”,然后得到结果 3?
非常感谢您的热心帮助,等待您的答复^_^
我是 Scala 的新手,我有以下问题。
def test() {
var mapObj = Map(1->'a',"Add"->((x:Int,y:Int)=>(x+y)))
mapObj("Add")
}
test()
如何使用参数 x:1 和 y:2 调用方法“Add”,然后得到结果 3?
非常感谢您的热心帮助,等待您的答复^_^
如果没有键值对1 -> 'a',这很简单。
scala> var mapObj = Map("Add"->((x:Int,y:Int)=>(x+y)))
mapObj: scala.collection.immutable.Map[String,(Int, Int) => Int] = Map(Add -> <function2>)
scala> mapObj.get("Add").get.apply(1,2)
res0: Int = 3
当键和值具有不同的类型时Int,String对于键和Char值Function2,类型推断器使用最常见的超类型,即Any. 然后你会得到Map[Any, Any]难以使用的类型。
尝试使键具有相同的类型,值具有相同的类型。类型推断器完成其余工作,您可以使用上面的代码。
问题是您的mapObjis 类型Map[Any,Any],因此mapObj("Add")返回类型的元素Any(实际上是 Function2)。因此,编译器不允许您将其用作函数。您需要将其转换为 Function2 然后使用它。
scala> val mapObj = Map(1->'a',"Add"->((x:Int,y:Int)=>(x+y)))
mapObj: scala.collection.immutable.Map[Any,Any] = Map(1 -> a, Add -> <function2>
)
scala> mapObj("Add")
res8: Any = <function2>
scala> mapObj("Add").asInstanceOf[scala.Function2[Int,Int,Int]](1,2)
res9: Int = 3
为避免所有这些,建议您1->'a'从地图中排除,并将地图作为类型Map[Int, Function]