加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala使用coalesce preappend方法扩展List类

发布时间:2020-12-16 10:08:10 所属栏目:安全 来源:网络整理
导读:我试图创建一个新的运算符:?在列表上,其操作与::相同,但如果值为null,则返回原始列表.我写了以下内容,但很快就知道我不知道自己在做什么…… object ImplicitList { implicit def extendIterator[T](i : List[T]) = new ListExtension(i) } class ListExte
我试图创建一个新的运算符:?在列表上,其操作与::相同,但如果值为null,则返回原始列表.我写了以下内容,但很快就知道我不知道自己在做什么……

object ImplicitList {
   implicit def extendIterator[T](i : List[T]) = new ListExtension(i)

 }

 class ListExtension[T <: Any](i : List[T]) {
  def :?[B >: T] (x: B): List[B] = if (x != null) x :: i else i
 }


 final case class :?[B](private val hd: B,private val tl: ListExtension[B]) extends ListExtension[B](tl.:?(hd))

解决方法

你想要的是增强我的库模式.有了这个,您可以向List添加一个新方法.这是看起来如何:

class EnhancedList[T](self: List[T]) {
  def ?:(t: T) = 
    t match {
      case null => self
      case _ => t :: self
    }
}
implicit def enhanceList[T](self: List[T]) = new EnhancedList(self)

因此,有一个类EnhancedList包含List,其中定义了新方法?:,以及一个隐式函数,它在调用?:时将List转换为EnhancedList.请注意,您必须使用?:而不是:?因为Scala的规则使得运算符是正确关联的,当且仅当它以:结尾时.

以下是它的使用方法:

scala> val l = List("a","b","c")
l: List[java.lang.String] = List(a,b,c)

scala> null ?: l
res136: List[java.lang.String] = List(a,c)

scala> "d" ?: l
res137: List[java.lang.String] = List(d,a,c)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读