gpt4 book ai didi

scala - 在 Scala 中使用隐式参数将泛型值传递给方法时出错

转载 作者:行者123 更新时间:2023-12-02 09:13:55 25 4
gpt4 key购买 nike

我在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](a: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: A, b: B) : Boolean = test(a, b)
^

为了使用泛型 AB 调用 test,编译器需要能够找到 的隐式实例>隐式[A,B]。由于 AB 可以是任何东西,因此编译器可以找到 test 的此类隐式的唯一方法是 if您需要相同的隐式跳转:

def jump[A, B](a: A, b: B)(implicit i: Implicit[A, B]) : Boolean = test(a, b)

关于scala - 在 Scala 中使用隐式参数将泛型值传递给方法时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com