簡體   English   中英

scala中{_ =>}和_ = somefunctionname()的含義或用法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM