2017-07-25 61 views
0

正在試圖存儲值的Scala初學者在Scala foreach循環中獲得,但是失敗了。 基本foreach循環看起來像這樣目前:存儲從每個循環獲得的值Scala

order.orderList.foreach((x: OrderRef) => { 
    val references = x.ref})) 

當運行這個foreach循環將執行兩次,每次都返回引用。我試圖捕獲它在每次運行時返回的參考值(因此兩個引用以列表或數組形式出現,因此我可以稍後訪問這些值)

我對如何去做這件事感到非常困惑。 ..

我試圖檢索和存儲值作爲一個數組,但運行時,數組列表似乎沒有任何值。

這是我的嘗試:

val newArray = Array(order.orderList.foreach((x: OrderRef) => { 
    val references = x.ref 
    })) 
    println(newArray) 

任何建議,將不勝感激。如果有更好的方法來實現這一點,請分享。由於

回答

1

使用foreachmap代替

order.orderList.map((x: OrderRef) => {x.ref})) 

而且val references = x.ref不返回任何東西。它創建新的局部變量併爲其賦值。

+0

謝謝,所以我不需要該局部變量,因爲數組將存儲結果?還有一種方法可以將數組中的值存儲到x個單獨的變量中嗎?我知道我可以使用索引訪問它們,但我期待未來證明它 – user610

+0

您問「還有一種方法可以將數組中的值存儲到x個單獨的變量中嗎?」答案是不。你只能在你的代碼中一個接一個地做。 – talex

+0

如果你知道數組的大小,它是固定的,那麼是的,你可以這樣做: 'val Array(foo,bar,baz)= order.orderList.map(_。x.ref)'(但是注意:只有當'order.orderList'是一個正好包含三個元素的'Array'時纔有效。 – Dima

1

同意應答1,我相信原因是如下:「的foreach」或「的」應該是「單元」

返回,和「地圖」是一個與像例如以下的改變的類型的結果:

def map[B](f: (A) ⇒ B): Array[B]

比較要forforeach,原型應該是這樣的

def foreach(f: (A) ⇒ Unit): Unit

所以,如果你想獲得一個變化的數據,該數據從源數據馬培德,考慮更多的像mapflatMap功能,而這些功能將穿越像forforeach(除了yield)所有提交的數據,但與返回值。