【问题标题】:Where does this .get(x) behavior come from?这个 .get(x) 行为从何而来?
【发布时间】:2019-11-12 22:06:29
【问题描述】:
Some("abcdefg").get(3)  //res0: Char = d

get() 的参数被发送到Stringapply() 方法,但Option(和Some)的source code 没有带参数的get() 方法,而String 根本没有get 方法。

那么get() 被调用的是什么?是爪哇地的鼹鼠吗?

【问题讨论】:

    标签: scala standard-library


    【解决方案1】:

    隐式转换为StringOps.apply

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

    augmentString 在哪里

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

    【讨论】:

      【解决方案2】:

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

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

      非常感谢@Mario Galic 为我指明了正确的方向。

      【讨论】:

      • 这里只有一个问题,这是否意味着,一个 .get 方法会在其中创建一个包装字符串的新副本
      • @ChaitanyaWaikar; get 方法不进行复制。调用apply() 时可能会发生其他事情,但get 本身非常简单:final case class Some[+A](value: A) extends Option[A] {def get: A = value}
      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 2023-02-03
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多