0

@lucastex发布了关于 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如果新的结构类型不为 null,即"Paulo"在上面的代码中,它应该返回任何东西的初始值。

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

4

2 回答 2

6

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

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

不过,所有方法都以点符号从左到右读取。所以你实际上是Lucas在中缀符号和name点符号中应用你的方法。

顺便说一句,猫王运算符不被接受包含在 Java 7 中。

于 2009-10-22T19:13:51.310 回答
2

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

于 2011-03-25T16:27:01.030 回答