鉴于以下情况:

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 ,它是 UnitInt 的最小上限。

简短的回答:不要这样做,这很糟糕。稍微长一点:不要这样做,这很糟糕,如果编译器建议使用 -deprecation 重新运行,请接受它——它可能会让发生的事情更清楚一些。

关于scala - List(1)#contains() 返回 `false`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30582442/

10-13 07:31