【问题标题】:Scala Implicit function within a function call函数调用中的 Scala 隐式函数
【发布时间】:2015-02-01 17:09:03
【问题描述】:

我已经定义了一个类,其中包含一个方法,该方法试图利用一个带有隐式参数的函数。不幸的是它无法编译

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 并在运行时确定我应该运行重载版本还是调用父实现。如果这是不可能的,我想我可以让班级采取隐含的

【问题讨论】:

    标签: scala implicit


    【解决方案1】:

    getAnswer 正在调用useImplicit,但Test 范围内没有implicit BooleangetAnswer 还需要 implicit 参数才能工作:

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

    正如你所说,另一种方法是让Test 在实例化时需要implicit

    【讨论】:

    • 最终的问题是我试图在运行时覆盖一个函数。我无法将参数添加到 getAnswer 方法,因为它会更改方法签名,因此不会由调用代码执行。我刚刚意识到我需要在创建对象时使用一个特征并在运行时将其混合。
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2017-04-27
    • 2014-05-22
    • 1970-01-01
    • 2021-04-20
    • 2016-08-18
    相关资源
    最近更新 更多