scala – 有条件地调用成员函数而不使用临时var
发布时间:2020-12-16 18:20:08 所属栏目:安全 来源:网络整理
导读:我有一个表达式返回一个对象,我想只在某个布尔条件为真时才在结果对象上调用一个方法.我想在val中获得结果(无论是对象,还是在对象上调用方法的结果). 一种方法是使用临时var,例如在下面的示例中,List(3,1,2)是返回对象的(可能复杂的)表达式,list是临时var,而
我有一个表达式返回一个对象,我想只在某个布尔条件为真时才在结果对象上调用一个方法.我想在val中获得结果(无论是对象,还是在对象上调用方法的结果).
一种方法是使用临时var,例如在下面的示例中,List(3,1,2)是返回对象的(可能复杂的)表达式,list是临时var,而.sorted是方法I想要有条件地调用: import scala.util.Random val condition = Random.nextBoolean val result = { var list = List(3,2); if (condition) list = list.sorted list } 这样做的规范方法是什么,也许不使用临时变量? 注意 if (condition) List(3,2).sorted else List(3,2) 不太令人满意,因为List(3,2)通常可能是一个复杂的表达,我不想重复. 这是我发现的一种方法,不幸的是涉及给出显式类型(并且比引入上面的临时var更长更复杂): val condition = Random.nextBoolean val result = ( if (condition) {l: List[Int] => l.sorted} else identity(_: List[Int]) ).apply(List(3,2)) 我怀疑必须有一种我没有认识到的更整洁的方式. 更新:一个稍微不那么丑陋的方法,遗憾的是仍然需要显式的类型信息: val condition = Random.nextBoolean val result = { l: List[Int] => if (condition) l.sorted else l }.apply(List(3,2)) 解决方法
您可以使用正向管道运算符:
implicit class PipedObject[A](value: A) { def |>[B](f: A => B): B = f(value) } scala> List(3,2) |> (xs => if (true) xs.sorted else xs) res1: List[Int] = List(1,2,3) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – com.paypal.core.rest.PayPalRESTException:读取
- 控制器的angularjs缩小问题
- scala – Akka演员记录不写文件
- Scala – 使用伴随对象作为函数接受块的简写参数
- PowerShell 自动给新员工发送欢迎邮件
- mybash的实现
- twitter-bootstrap – 如何使用Twitter Bootstrap 2获得16列
- angularjs – 角度输入值未更改.即oldValue == newValue
- scala – 如何将数据框的列转换为Apache Spark中的列表?
- angular – rxjs / Observable:获取第一个流后运行一次函数