Scala A<;:&书信电报;SomeType参数声明
查看Scala A<;:&书信电报;SomeType参数声明,scala,function,Scala,Function,查看scala.Option[T]sources,我发现以下隐式参数声明implicit ev:Null 我发现p看起来像函数1 它们有不同的语义。在test中,您声明T是选项[Int]的一个子类型。在test2中没有这样的约束 但是如何使用测试?有没有一种方法可以调用它?但是@Kolmar仍然不能使paFunction1。这只意味着约束使用了中缀符号,实际上它被定义为@Dici。深入研究文档时,我发现它的意图只是用作隐式参数要约束方法参数列表中范围内的任何抽象类型T(不仅仅是方法自己的类型参数
scala.Option[T]
sources,我发现以下隐式参数声明implicit ev:Null
我发现p
看起来像函数1
它们有不同的语义。在test
中,您声明T
是选项[Int]
的一个子类型。在test2
中没有这样的约束 但是如何使用测试?有没有一种方法可以调用它?但是@Kolmar仍然不能使p
aFunction1
。这只意味着约束使用了中缀符号,实际上它被定义为@Dici。深入研究文档时,我发现它的意图只是用作隐式参数要约束方法参数列表中范围内的任何抽象类型T(不仅仅是方法自己的类型参数),只需添加类型为
T@Dici的隐式参数,但您不能解释是谁创建了这个隐式,那么如何调用test2
?我应该传递什么作为参数以使其编译?
class Test[T](val i: Int){
def test(p: T <:< Option[Int]) = 1
}
class TestMatch[T](val i: Int){
def test(p: T <:< Option[Int]) = //..
def test2(p: T => Option[Int]) = //...
}
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)
})
sealed abstract class <:<[-From, +To] extends (From => To) with Serializable
def greaterThan[T](x: T, y: T)(implicit ev: T <:< Ordered[T]): Boolean = x > y