我是 scala 的初学者,正在寻找最佳/惯用的方式来完成我打算在这里做的事情。
这就是我想做的
def someMethod(obj:MyObj):List[String] = {
List[String]() +:
{if (somecondition is satisfied) .. " element"} +:
{ if (another condition) .. " something else " }
}
即该方法检查输入参数对象的一些属性并将元素添加到列表(即要返回的列表)中。如果不满足任何条件,它应该返回一个空列表。
- 当然,代码无法编译。但不知何故,对我来说, List[T] + Unit 应该返回 List[T] 似乎很直观。为什么我错了?
还有 2. 请告诉我执行此 Scala 的正确方法。如果我要遍历条件列表,我可以使用理解。
最佳答案
与其过滤 Unit,我宁愿使用一元列表或空列表:
def someMethod(obj:MyObj): List[String] = {
Nil ++
( if (somecondition is satisfied) List(" element") else Nil ) ++
( if (another condition) .. List(" something else ") else Nil ) ++
}
编辑:关于您在下面的评论,如果您发现上面的代码过于冗长且难以维护,您仍然可以创建一个辅助函数:
def optElem[T]( condition: Boolean)( value: => T ): Option[T] = if ( condition ) Option( value ) else None
def someMethod(obj:MyObj): List[String] = {
Nil ++
optElem (somecondition is satisfied)( " element") ++
optElem (another condition)(" something else " )
}
关于list - Scala 不可变列表添加 'Unit' 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402156/