回答
你可以用標準庫做這樣的事情:
val List(a,b,c,d) = List(aa,bb,cc,dd).map(f)
它使用模式匹配來分配左側的值,如果兩個List
s的長度不相同,則在運行時會失敗。
Scalaz具有使用元組,以確保在左,右值的數量是多類型安全的選項相同(在編譯時檢查):
import scalaz._, Scalaz._
val (a,b,c,d) = (aa,bb,cc,dd).map(f)
'val List(a,b,c,d)=列表(aa,bb,cc,dd).map(f)'不是leazy解決方案all a,b,c,..將在同一時間執行,但是'def a = f(aa)'和'def b = f(bb)'將在它會調用的時刻執行。 – Yuriy
當我用scalaz解決方案替換標準解決方案時,出現了一個編譯錯誤:[error] conf/routes:49:適用於方法的參數不夠:(n:Int)models.EventType.Value在特徵LinearSeqOptimized中。 [錯誤]未指定的值參數n。 –
Yury:是的,如果'f'有副作用,這將是一個問題。我想不出任何類似的東西。 Yann:我沒有足夠的上下文來診斷scalaz解決方案的問題。 –
我們可以隱: http://docs.scala-lang.org/overviews/core/implicit-classes.html
val aa: Int = 1
// Let's say that your function f returns instance of C
def f(x: Int): C = ???
implicit class C(in: Int) {
// Do whatever you need here ...
}
def a: C = aa
aa實際上是一個函數,這裏是f的定義:'def f [A:Reads,B:Writes](g:A => B)' –
- 1. 如何減少樣板與Kleisli
- 2. 是否可以減少樣板函數中的參數數量?
- 3. 組合vs減少耦合?
- 4. 組合減少和與對象
- 5. C#中的數組結構 - 減少樣板代碼寫作
- 6. 減少數組
- 7. 在反應減少應用程序中減少回調樣板
- 8. 夫特:減少與閉合
- 9. 減少Haskell函數
- 10. 減少jQuery函數
- 11. 使用變形代碼減少樣板
- 12. 如何減少委託樣板文件?
- 13. 當裝飾方法減少樣板
- 14. 如何減少迭代器的樣板?
- 15. 如何從此功能減少樣板?
- 16. 當沒有組合函數存在時收集/減少流
- 17. Swift減少元組數組
- 18. 分數減少函數
- 19. CouchDB的減少函數值
- 20. 幫助減少Lisp函數
- 21. 減少JavaScript中的函數
- 22. omp減少和lambda函數
- 23. 減少JavaScript函數長度
- 24. 減少重複代碼,並與模板
- 25. 如何減少vert.x中樣板代碼的數量
- 26. 減少多維數組
- 27. 減少數組長度
- 28. 。數組減少方法
- 29. 減少座標數組
- 30. 減少多維數組
我很想知道爲什麼你認爲它是樣板。你怎麼可能以更簡潔或更清晰的方式寫這個?很快人們會發現'def'關鍵字也是樣板文件! :-P –
因爲相同的模式(呼籲f)多次出現,但我同意,這只是一些樣板,也許不可能做得更好。 –