我有一个类型为的地图:
val m: HashMap[Double, (Double, Long)]
当我运行retain方法时:
m.retain(p => true)
它抱怨Type mismatch. Expected: (Double, (Double, Long)) => Boolean, actual: Double => Boolean
然后我尝试将类型签名添加到参数:
m.retain(p: (Double, (Double, Long)) => true)
然后它抱怨Type mismatch. Expected: (Double, (Double, Long)) => Boolean, actual: (Double, (Double, Long)) => Boolean
,这对我没有意义,因为它们是相同的。
我也尝试过:
m.retain((k,(v,t))=>true)
仍然给出类型不匹配错误。
我认为它可能是错误的检查器所以我尝试运行编译器然后给我另一个不同的错误:identifier expected but 'true' found
在这种情况下我该如何保留?
scala.collection.mutable.MapLike.retain
参数p
是一个带有两个参数的函数:key
和value
(它不是一个带有tuple
和key
的value
的函数)
你需要像这样写:
m.retain((k, v) => true)
或者像这样:
m.retain({
case (k, v) => true
})
或者像这样:
m.retain({
case (k, (v1, v2)) => true
})
您有以下功能:
//function that takes a function that takes multiple arguments
def test1(f: (Int, Int) => Boolean): Boolean = f(0, 0)
//function that takes a function that takes a tuple
def test2(f: ((Int, Int)) => Boolean): Boolean = f((0, 0))
当您使用PartialFunction并写入时
test1({
case (v1, v2) => true
})
它等于
test1((arg1, arg2) => (arg1, arg2) match {
case (v1, v2) => true
})
但是当你使用PartialFunction并编写时
test2({
case (v1, v2) => true
})
它等于
test2(tuple => tuple match {
case (v1, v2) => true
})
两种情况看起来都一样,但它们的工作方式不同。在多个参数的情况下,match
处理参数元组。在单个元组参数的情况下,match
处理这个元组。