任何人都可以<:<在scala中提供有关运算符的一些细节.我认为:
if(apple <:< fruit) //checks if apple is a subclass of fruit.
Run Code Online (Sandbox Code Playgroud)
还有其他解释吗?我在scala源文件中看到了很多定义.
在我的Scala代码中,我有一个数组Option[T],如下所示:
val items = Array.fill[Option[T]](10)(None)
Run Code Online (Sandbox Code Playgroud)
现在,我想从该数组中读取一个特定的项目; 如果没有设定,我想拥有null.但是当我这样做时items(desiredIndex).orNull,Scala编译器会对我大喊:
Error:(32, 34) Cannot prove that Null <:< T.
(items(desiredIndex).orNull).asInstanceOf[T]
Run Code Online (Sandbox Code Playgroud)
我不完全理解这个错误.我所理解的是,编译器无法推断出它null确实是一个有效值T(因为它不知道T将是什么).纵观实施,我应提供证据隐含的事实,null是一个有效的价值T:
@inline final def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse ev(null)
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:我怎样才能提供这样的证据?ev应该是什么类型,我该如何为它创建一个值?