Scala函数调用中的隐式函数
我定义了一个类,该类中有一个方法,该方法试图利用一个包含隐式参数的函数。不幸的是,它无法编译Scala函数调用中的隐式函数,scala,implicit,Scala,Implicit,我定义了一个类,该类中有一个方法,该方法试图利用一个包含隐式参数的函数。不幸的是,它无法编译 class Test { def useImplicit(implicit a: Boolean) = a def getAnswer() = if (useImplicit) println("yes") else println("no") } object Preferences { implicit val yes = false implicit val n
class Test {
def useImplicit(implicit a: Boolean) = a
def getAnswer() = if (useImplicit) println("yes") else println("no")
}
object Preferences {
implicit val yes = false
implicit val no = false
}
问题是,当我去编译类并尝试测试它时,我得到了错误
could not find implicit value for parameter a: Boolean
def getAnswer() = if (useImplicit) println("yes") else println("no")
我不太清楚这里发生了什么。我尝试这种方式的原因是,我最终希望重载hashCode,并在运行时确定是应该运行重载版本还是调用父实现。如果这是不可能的,我想我可以让类采用隐式
getAnswer
调用useImplicit
,但是测试范围内没有隐式布尔
getAnswer
还需要隐式
参数才能工作:
def getAnswer(implicit a: Boolean) = if(useImplicit) println("yes") else println("no")
另一种选择是让Test
在实例化时要求隐式。最终的问题是我试图在运行时重写函数。我无法将参数添加到getAnswer方法中,因为它会更改方法签名,因此不会由调用代码执行。我刚刚意识到,在创建对象时,我需要在运行时使用一个trait并将其混合在一起。