オブジェクトを返す式があり、特定のブール条件が true の場合にのみ、結果のオブジェクトでメソッドを呼び出したいと考えています。結果 (オブジェクト、またはオブジェクトでメソッドを呼び出した結果) を val で取得したいと考えています。
1 つの方法は、次の例のように一時変数を使用することです。この例でList(3, 1, 2)
は、オブジェクトを返す (潜在的に複雑な) 式list
が一時変数であり、.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)
一般に、繰り返したくない複雑な表現になる可能性があるため、満足のいくものではありません。
残念ながら、明示的な型を指定する必要があることがわかった方法を次に示します (上記のように一時的な var を導入するよりも長く複雑です)。
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))