Scala:哪个隐式参数优先?一个声明了定义方法的地方?还是在哪里调用该方法?

如果在对象中定义了一种方法,以采用如下所示的隐式参数:

object MyApp {
   implicit val implicitParameter: String = "Hello!"

   def printImplicitString()(implicit ip: String): Unit = println(ip)
}

..然后在另一个对象中调用此方法,该对象具有其自己的隐式参数,类型为String,该参数具有优先级吗?

 object myotherApp extends App {

   implicit val implicitParamter2: String =  "World!"

   MyApp.printImplicitString()
 }

此打印为Hello!还是World!?无法使其在intellij中运行,可能是因为它可能是无效的代码。

ychmail 回答:Scala:哪个隐式参数优先?一个声明了定义方法的地方?还是在哪里调用该方法?

靠近方法调用的那个优先。 Scala将从调用该方法的范围开始,并向后进行。根据Scala Docs herehere的说法:

  

首先,符合条件的所有标识符x都可以在方法调用时访问而没有前缀,并且表示隐式定义或隐式参数。

     

第二,合格的还包括标记为隐式的隐式参数类型的伴随模块的所有成员

因此此代码将显示“世界!”

本文链接:https://www.f2er.com/3166090.html

大家都在问