Есть ли способ перенести метод 0-арности с круглыми скобками на отсутствие круглых скобок? - PullRequest
2 голосов
/ 03 апреля 2020

Скажем, я разработал какой-то API и недальновидно дал скобки для функции 0-арности в своем определении

class Foo(value: String) {
  def chars(): Seq[Char] = value.toSeq
}

Это означает, что вам неприятно приходится предоставлять пустые скобки, если вы хотите следовать вызову этого метода с помощью apply на возвращаемом Seq:

val f = new Foo("Hello")
println(f.chars()(3))

Это явно не идеально, было бы лучше иметь возможность написать:

println(f.chars(3))

Конечно, если вы удалите круглые скобки из определения метода, это ломает все существующие использования, которые обеспечивают круглые скобки. Есть ли способ перенести функцию 0-арности из круглых скобок в отсутствие их, не нарушая всех применений?

1 Ответ

3 голосов
/ 03 апреля 2020

Вы можете дать отработанному методу неиспользованный vararg.

class Foo(value: String) {
  def chars(cs:Char*): Seq[Char] = value.toSeq
  def chars: Seq[Char] = value.toSeq
}

(new Foo("wxyz")).chars()(2)  //res0: Char = y
(new Foo("wxyz")).chars(2)    //res1: Char = y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...