.get(x)行为从何而来?

时间:2019-07-02 09:33:57

标签: scala standard-library

Some("abcdefg").get(3)  //res0: Char = d

get()的参数被发送到apply()的{​​{1}}方法,但是source code代表String(和Option)没有使用参数的Some方法,并且get()根本没有String方法。

那么get被调用了什么?是爪哇岛的痣吗?

2 个答案:

答案 0 :(得分:6)

它是StringOps.apply来自隐式转换

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

augmentString在哪里

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

答案 1 :(得分:6)

实际上,在这种情况下,.get(x)不是单独的get()方法,而是.get.apply(x)的缩写。因此,这是get类型的标准Some方法。不需要隐式。

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

非常感谢@Mario Galic向我指出正确的方向。