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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |