Some("abcdefg").get(3) //res0: Char = d
get()
的参数被发送到apply()
的{{1}}方法,但是source code代表String
(和Option
)没有使用参数的Some
方法,并且get()
根本没有String
方法。
那么get
被调用了什么?是爪哇岛的痣吗?
答案 0 :(得分:6)
它是StringOps.apply
来自隐式转换
augmentString(Some("abcdefg").get)(3)
@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向我指出正确的方向。