我有返回一个对象的表达式,并且我想要调用仅当某个布尔条件为真所得到的物体上的方法。 我想要得到的结果(无论是对象,或调用对象的方法的结果)在VAL。
一种方法是使用一个临时变量,如在下面的例子中,在该List(3, 1, 2)
是(潜在复杂)表达返回一个对象, list
是临时var和.sorted
是该方法我希望有条件地调用:
import scala.util.Random
val condition = Random.nextBoolean
val result = {
var list = List(3, 1, 2);
if (condition) list = list.sorted
list
}
什么是做到这一点,或许不使用一个临时变量的正规途径?
注意
if (condition) List(3, 1, 2).sorted else List(3, 1, 2)
是不是很令人满意,因为List(3, 1, 2)
一般可以,我不想重复一个复杂的表达式。
这是一个方法,我发现,不幸的是涉及给予明确的类型(是不是引入一个临时变量如上更长,更复杂):
val condition = Random.nextBoolean
val result =
(
if (condition)
{l: List[Int] => l.sorted}
else
identity(_: List[Int])
).apply(List(3, 1, 2))
我猜想一定有,我没有认识到一个整洁的方式。
更新:不幸仍然需要明确的类型信息的略少丑方法:
val condition = Random.nextBoolean
val result = {
l: List[Int] => if (condition) l.sorted else l
}.apply(List(3, 1, 2))