[英]What is the meaning or use of { _ => } and _ = somefunctionname() in scala
在問題中,為什么人們在scala中以最混亂的方式編寫代碼,如同
_ = function1(arg1, arg2)
和
anObject.method(arg1, arg2) { _ => }
我不明白它的作用。
第一個問題與monadic風格有關。 在for
comprehensions中,不可能簡單地調用函數。
for {
x <- getList // <- I don't need this x!
y = func(42)
println(y) // <- I cannot do this!
} yield y
但是,有時您對結果不感興趣,因此不想給它起個名字。
至少Scala允許您使用下划線放棄這些結果:
for {
_ <- getList // <- somewhat better
y = func(42)
_ = println(y) // <- somewhat dumb, but better than not being able to
} yield y
當您對函數的參數不感興趣時,Scala還允許您使用下划線,例如:
List.tabulate(3, 3)((x, _) => x) // we omitted second argument
生成3x3列表,所有行具有相同的編號
List(
List(0, 0, 0),
List(1, 1, 1),
List(2, 2, 2)
)
最后,沒有語句的塊被認為是塊返回Unit
(在java中類似於void
)
作為一個不太抽象的示例,您可以考慮在評估時執行某些操作的迭代器:
val it = Iterator.from(1).map(x => { println(s"x is $x"); x }).take(3)
迭代器是懶惰的,所以在我們將它轉換為集合或調用foreach
之前不會發生任何事情。 如果我們只關心副作用,可以寫:
it.foreach { _ => }
只有在看到此輸出后:
x is 1
x is 2
x is 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.