Scala 列表(1)#contains()返回`false`
鉴于以下情况:Scala 列表(1)#contains()返回`false`,scala,Scala,鉴于以下情况: scala> List(1).contains() warning: there was one deprecation warning; re-run with -deprecation for details res18: Boolean = false 为什么false返回 签名如下: def包含[A1>:A](元素:A1):布尔值 因此,据我所知,包含的参数必须等于或高于A的类型 为什么返回false?如果使用-deprecation再次运行它(如警告所示),您将
scala> List(1).contains()
warning: there was one deprecation warning; re-run with -deprecation for details
res18: Boolean = false
为什么false
返回
签名如下:
def包含[A1>:A](元素:A1):布尔值
因此,据我所知,包含的
参数必须等于或高于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
scala>List(1).contains()
:8:警告:通过插入()调整参数列表
已被弃用:这不太可能是您想要的。
签名:LinearSeQoOptimized。包含[A1>:A](元素:A1):布尔值
给定参数:
自适应后:LinearSeQoOptimized。包含(():单位)
列表(1).contains()
^
res0:Boolean=false
因此,List(1).contains()
被解析为List(1).contains(())
,而A1
的推断类型是AnyVal
,它是单位
和Int
的最小上界
简单的回答是:不要这样做,这很糟糕。稍长一点:不要这样做,这是不好的,如果编译器建议重新运行-deprecation
,接受这个提议,它可能会让事情变得更清楚。():Unit
是它从contains()
中得到的参数。为什么lub
没有解析为AnyVal
,而不是任何
scala>lub(List(typeOf[Int],typeOf[Unit])res28:reflect.runtime.universe.Type=AnyVal
@KevinMeredith噢,关于AnyVal
你可能是对的。但是,它没有任何区别,因为该类型没有在任何地方使用(包含
有效地接受了任何
,这是使其几乎一文不值的几个问题之一)。