Откуда происходит это .get (x) поведение? - PullRequest
6 голосов
/ 02 июля 2019
Some("abcdefg").get(3)  //res0: Char = d

Аргумент get() отправляется методу apply() String, но исходный код для OptionSome) не имеет get() метод, который принимает параметры, а String вообще не имеет get метода.

Так что же вызывается get()? Это родинка с земли Явы?

Ответы [ 2 ]

6 голосов
/ 02 июля 2019

На самом деле, в этом случае .get(x) - это не отдельный метод get(), а сокращение .get.apply(x). Так что это стандартный метод get для типа Some. Никаких последствий не требуется.

Some(Seq(99,32,12,7,101)).get(3)  //res0: Int = 7

Большое спасибо @Mario Galic за то, что он указал мне правильное направление.

6 голосов
/ 02 июля 2019

Это StringOps.apply из неявного преобразования

augmentString(Some("abcdefg").get)(3)

где augmentString равно

@inline implicit def augmentString(x: String): StringOps = new StringOps(x)
...