【发布时间】:2018-04-24 03:53:45
【问题描述】:
使用 Scala REPL,我定义了一个函数,它将 Int 作为其第一个参数,并将此签名 Int => Int 作为第二个隐式参数的函数:
scala> def doer(i: Int)(implicit a: Int => Int): Int = a(i)
doer: (i: Int)(implicit a: Int => Int)Int
为什么在不提供隐式参数的情况下运行此函数?
scala> doer(4)
res1: Int = 4
隐式 Int to Int 函数从何而来? REPL 报告没有定义隐式:
scala> :impl
No implicits have been imported other than those in Predef.
【问题讨论】:
-
为了避免这种问题,我只允许
implicit参数使用至少一种由我的代码定义的类型。这意味着不存在与其他库中定义的implicit值混淆的危险。