在Scala中使用隐式参数将通用值传递给方法时出错
发布时间:2020-12-16 10:05:57 所属栏目:安全 来源:网络整理
导读:我在 Scala中实现了以下代码 trait Implicit[A,B] { def method1(a:A,b:B) : Boolean }object Implicit { implicit object IntImplicit extends Implicit[Int,Int] { override def method1(a: Int,b: Int): Boolean = a == b }}object Main{ def main(args:A
我在
Scala中实现了以下代码
trait Implicit[A,B] { def method1(a:A,b:B) : Boolean } object Implicit { implicit object IntImplicit extends Implicit[Int,Int] { override def method1(a: Int,b: Int): Boolean = a == b } } object Main { def main(args:Array[String]) : Unit = { println(test(4,3)) } def test[A,B](a:A,b:B)(implicit i: Implicit[A,B]) : Boolean = i.method1(a,b) } 它实际上工作正常.但是,如果我定义以下功能 def jump[A,b:B) : Boolean = test(a,b) 进入Main对象,它告诉我没有“足够的方法测试参数”.我想这是因为它无法在编译时定义实际的隐式值.这是真的还是问题不是别的什么?如果是,我该如何解决这个问题? 显然,这只是问题的简化,以便复制一个条件,我必须调用一个方法来声明一个先前不知道实际类型的隐式参数. 解决方法
你应该得到的错误是:
scala> def jump[A,B](a: A,b: B) : Boolean = test(a,b) <console>:14: error: could not find implicit value for parameter i: Implicit[A,B] def jump[A,b) ^ 为了使用泛型A和B调用测试,编译器需要能够找到隐式[A,B]的隐式实例.由于A和B可以是任何东西,编译器可以找到这样的隐式测试的唯一方法是,如果你需要相同的隐式跳转: def jump[A,b: B)(implicit i: Implicit[A,B]) : Boolean = test(a,b) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |