看着scala.Option[T]
来源我发现了下面的隐式参数声明implicit ev: Null <:< A1
。尝试它自己A <:<SomeType参数声明
class Test[T](val i: Int){
def test(p: T <:< Option[Int]) = 1
}
我发现p
看起来像一个Function1
。它有apply
,andThen
等方法。会有什么区别,如果我们写:
class TestMatch[T](val i: Int){
def test(p: T <:< Option[Int]) = //..
def test2(p: T => Option[Int]) = //...
}
是否存在的test
和test2
singatures之间的一些主要区别?这个例子beahves是这样的:
tm.test2(x => { //fine
println(x)
Some(x)
})
tm.test(x => { //Compile error
println(x)
Some(x)
})
我也试过这样:
tm.test(x <:< { //Compile error
println(x)
Some(x)
})
,但它也不能工作。如何使用test
?
但是我该如何使用'test'?有没有办法调用它? – stella
但是'<:<'是一个函数。它在'Predef'中被定义为''封闭的抽象类<:<[ - From,+ To] extends Serializable' – Kolmar
@Kolmar仍然不会使'p'成为Function1。它只意味着约束使用中缀表示法,它实际上定义为'<:<[T,Option [Int]]' –