pau*_*art 0 scala operators implicit
@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
Run Code Online (Sandbox Code Playgroud)
为什么name ?: "Lucas"得到"Lucas"并name.?:{"Lucas"}得到Paulo?如果它不是null,那么新结构类型应该返回任何东西的初始值,即"Paulo"在上面的代码中.
我有点困惑.任何解释?
您的操作员结束:,这意味着在使用中缀表示法时,它从右向左读取.例如:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)
但是,所有方法都以点符号从左到右阅读.因此,您实际上是将您的方法应用于Lucas中缀表示法,并name使用点表示法.
顺便说一下,Elvis运算符不被允许包含在Java 7中.
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |