Scala: Какой неявный параметр имеет приоритет? Тот, который объявлен, где метод определен? Или где метод называется? - PullRequest
1 голос
/ 04 ноября 2019

Если в объекте определен метод для получения неявного параметра, подобного этому:

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, возможно, потому что это может быть неверный код.

1 Ответ

3 голосов
/ 04 ноября 2019

Тот, что рядом с вызовом метода, будет иметь приоритет. Scala запускается из области, где вызывается метод, и работает в обратном направлении. Согласно Scala Docs здесь и здесь :

Во-первых, допустимы все идентификаторы x, к которым можно получить доступ в точке вызова метода без префиксаи это обозначает неявное определение или неявный параметр.

Во-вторых, допустимы также все члены сопутствующих модулей типа неявного параметра, помеченные как неявные

Так что этот код будет печатать'Мир!'

...