@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?:&quot; Lucas&quot; 获取&quot; Lucas&quot; name。?:{&quot; Lucas&quot;} 获取<代码>圣保罗?如果不为空,则新结构类型应返回任何内容的初始值,即上述代码中的&quot; Paulo&quot;

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

有帮助吗?

解决方案

您的操作员以结尾,这意味着在使用中缀表示法时,它从右向左读取。例如:

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

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

顺便说一句,Elvis运营商是接受以包含在Java 7中。

其他提示

为了记录(在搜索下面的文章时找到这个帖子......),Daniel Spiewak(Scala世界另一位着名的丹尼尔......)发表了一篇关于在Scala中实现Groovy&#8217; Elvis运算符

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top