【问题标题】:Scala Implicit convertions: 2 way to invokeScala 隐式转换:2 种调用方式
【发布时间】:2010-12-09 05:17:54
【问题描述】:

@lucastex posted 关于 Java Elvis 运算符,我在 Scala 中尝试了一些东西以获得相同的效果。

我刚刚将所有内容都转换为新的结构类型,?: 运算符采用与参数相同类型的对象。所以说:

implicit def toRockStar[B](v : B) = new { 
                            def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example

为什么name ?: "Lucas" 得到"Lucas"name.?:{"Lucas"} 得到Paulo?如果新的结构类型不为空,则应该返回任何东西的初始值,即上述代码中的"Paulo"

我有点困惑。有什么解释吗?

【问题讨论】:

    标签: scala operators implicit


    【解决方案1】:

    您的运算符以: 结尾,这意味着它在使用中缀表示法时从右到左读取。例如:

    scala> 1 :: Nil == Nil.::(1)
    res2: Boolean = true
    

    不过,所有方法都以点表示法从左到右读取。因此,您实际上是将您的方法应用于中缀符号中的Lucas,以及点符号中的name

    顺便说一句,Elvis 运算符是 not accepted,用于包含在 Java 7 中。

    【讨论】:

    • 天哪!你的权利! O'Reilly Programming Scala 中的第 223 页。谢谢!
    【解决方案2】:

    为了记录(在搜索以下文章时找到此线程...),Daniel Spiewak(Scala 世界中的另一位著名丹尼尔...)发布了一篇关于 Implementing Groovy’s Elvis Operator in Scala 的文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2018-09-16
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多