2014-02-27 47 views
1

我目前看起來像這樣的聲明:是否有可能影響'_'lambda參數的排序方式?

arrays.foldLeft(0)((offset, array) => array.copyTo(largerArray, offset)) 

這將是巨大如下表達出來,但由於foldLeft旨在利用種子說法首先這是不可能的:

arrays.foldLeft(0)(_.copyTo(largerArray, _)) 

這完全是膚淺的 - 我只是好奇!

p.s.在本例中,copyTo返回下一個偏移量。

+0

就我個人而言,我認爲不可能以比現在更簡潔的方式書寫。 –

+2

斯卡拉斯至少有'flip'。但爲了利用,您可能需要在'_'s上使用類型註釋。原則上,用法將是'arrays.foldLeft(0)((_ _ copyTo(largerArray,_))。flip)'。 – Debilski

+0

有趣的是,謝謝Debilski。很高興知道,但在這種情況下,原始聲明可能是最可讀的 –

回答

3

The SLS好像在說「不」。

科6.23,匿名功能/佔位符的語法匿名函數

(句法類別Expr的)的表達可能包含嵌入 強調在地方符號_其中標識符是合法的。這樣的表達式表示一個匿名函數,其中後續 下劃線的出現表示連續參數。

如果表達式e結合下劃線部分u1 , . . . , un以該順序,它等同於匿名功能(u'1 , ... u'n) => e'其中來自ui每個u'i結果通過更換 用下劃線一個新的標識符和e'結果來自e由 取代每個下劃線部分uiu'i

強調是我的 - 它在相關部分中明確指出假定保留排序。

就我個人而言,我認爲強制這一點是有道理的,如果「僅」出於可讀性的原因。

相關問題