鉴于以下情况:
scala> List(1).contains()
warning: there was one deprecation warning; re-run with -deprecation for details
res18: Boolean = false
为什么
false
会返回?List#contains 有签名:
def contains[A1 >: A](elem: A1): Boolean
所以,据我所知,
contains
参数必须等于或高于 A
的类型。为什么这会返回
false
? 最佳答案
如果您使用 -deprecation
再次运行它(如警告所建议的那样),您将看到:
scala> List(1).contains()
<console>:8: warning: Adaptation of argument list by inserting ()
has been deprecated: this is unlikely to be what you want.
signature: LinearSeqOptimized.contains[A1 >: A](elem: A1): Boolean
given arguments: <none>
after adaptation: LinearSeqOptimized.contains((): Unit)
List(1).contains()
^
res0: Boolean = false
所以
List(1).contains()
被解析为 List(1).contains(())
, A1
的推断类型是 AnyVal
,它是 Unit
和 Int
的最小上限。简短的回答:不要这样做,这很糟糕。稍微长一点:不要这样做,这很糟糕,如果编译器建议使用
-deprecation
重新运行,请接受它——它可能会让发生的事情更清楚一些。关于scala - List(1)#contains() 返回 `false`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30582442/