Scala条件列表构造
发布时间:2020-12-16 19:11:41 所属栏目:安全 来源:网络整理
导读:我正在使用 Scala 2.9.2,并希望根据某些条件构建一个列表. 考虑以下内容,其中cond是一些函数,它采用谓词p和类型T的值(在本例中为t3): t1 :: t2 :: cond( p,t3 ) :: t4 我想要的行为如下.如果p为真,则应该给出: List[T]( t1,t2,t3,t4 ) 如果p的计算结果为fa
我正在使用
Scala 2.9.2,并希望根据某些条件构建一个列表.
考虑以下内容,其中cond是一些函数,它采用谓词p和类型T的值(在本例中为t3): t1 :: t2 :: cond( p,t3 ) :: t4 我想要的行为如下.如果p为真,则应该给出: List[T]( t1,t2,t3,t4 ) 如果p的计算结果为false,t4 ) 我可能完全以错误的方式思考这个问题,但我很难想出一个优雅的解决方案.我可以在任何地方参与选项然后过滤,但这会使代码更难以阅读: def cond[T]( p : => Boolean,v : T ) : Option[T] = { p match { case true => Some( v ) case false => None } } 这允许以下内容: scala> ( Some( 1 ) :: Some( 2 ) :: cond( true,3 ) :: Some( 4 ) :: Nil ).flatten res4: List[Int] = List(1,2,3,4) scala> ( Some( 1 ) :: Some( 2 ) :: cond( false,3 ) :: Some( 4 ) :: Nil ).flatten res5: List[Int] = List(1,4) 但是,它不是最优雅的解决方案,因为它要求用户将所有非条件元素包装在Some()中,并且还要记住在最后进行展平.谁能想到更优雅的解决方案? 解决方法
如何产生一个列表?
@inline def cond[T]( p : => Boolean,v : T ) : List[T] = if(p) v::Nil else Nil 然后使用它们: List(1,3) ++ cond(false,3 ) ++ List(4) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容