加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读