Scala как создать неявный объект с тем же именем, что и функция - PullRequest
4 голосов
/ 28 января 2020

Учитывая следующие определения свойств и сопутствующих объектов:

trait Api {
  def foo(s: String): String
}

object Api extends Api {
  override def foo(s: String) = s
}

Я хотел бы расширить метод foo объекта-компаньона, чтобы иметь функцию свойства, и для этого я использую следующий неявный класс:

implicit class ExtendApi(api: Api.type) {
  object foo {
    def asInt(s: String): Int = s.toInt
  }
}

println (Api.foo.asInt("1")) // Does not work

Тем не менее, использование этого компилирует. Я получаю сообщение об ошибке:

missing argument list for method foo in object Api
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `foo _` or `foo(_)` instead of `foo`.

Кажется, scala не разрешает неявное определение для поиска объекта foo.

Я попытался указать явное, написав:

println (implicitly[Api.type].foo.asInt("1"))

Теперь я получаю еще одну ошибку:

could not find implicit value for parameter e: Playground.this.Api.type

Эта новая ошибка не имеет смысла для меня.

Возможно ли то, что я пытаюсь сделать? Как я могу исправить ошибки? Спасибо.

Scast ie Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...