我是 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]
难以使用的类型。
尝试使键具有相同的类型,值具有相同的类型。类型推断器完成其余工作,您可以使用上面的代码。
问题是您的mapObj
is 类型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]