题
@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"}
获取<代码>圣保罗代码>?如果不为空,则新结构类型应返回任何内容的初始值,即上述代码中的&quot; Paulo&quot;
。
我有点困惑。有什么解释吗?
解决方案
您的操作员以:
结尾,这意味着在使用中缀表示法时,它从右向左读取。例如:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
但是所有方法都以点符号从左到右阅读。因此,您实际上是将您的方法应用于中缀表示法中的 Lucas
,并使用点表示法将 name
应用。
顺便说一句,Elvis运营商是接受以包含在Java 7中。
其他提示
为了记录(在搜索下面的文章时找到这个帖子......),Daniel Spiewak(Scala世界另一位着名的丹尼尔......)发表了一篇关于在Scala中实现Groovy&#8217; Elvis运算符。
不隶属于 StackOverflow