2014-12-03 87 views
1

我已经定义了一个类,该类中有一个方法试图使用带有隐式参数的函数。不幸的是它的失败编译Scala函数调用中的隐式函数

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 
} 

的问题是,当我去编译类,试图测试一下我的错误

​​

我不太确定是怎么回事这里。我这样试图这样做的原因是我最终想重载hashCode并确定在运行时是否应该运行我的重载版本或调用父实现。如果这是不可能的,我想我可以使类采取隐

回答

1

getAnswer呼吁useImplicit,反而有Test范围内没有implicit BooleangetAnswer也将要求implicit参数的工作:

def getAnswer(implicit a: Boolean) = if(useImplicit) println("yes") else println("no") 

另一种方法是使Test需要在实例化implicit,就像你说的。

+0

最终的问题是我想在运行时重写一个函数。我不能将参数添加到getAnswer方法,因为它会更改方法签名,因此不会由调用代码执行。我刚刚意识到我需要在创建对象时使用特征并在运行时混合它。 – 2014-12-03 23:43:39