鉴于以下内容:
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
?
答案 0 :(得分:7)
如果您使用-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
的最小上限和{ {1}}。
简短的回答:不要这样做,这很糟糕。稍微长一些:不要这样做,这很糟糕,如果编译器建议重新运行Int
,那就把它拿出去 - 它可能会让事情变得更清晰。