30
A
回答
51
這就是所謂的通過名稱。這意味着你傳遞的函數應該返回Int
,但主要用於實現參數的懶惰評估。它有點類似於:
def myFunc(param:() => Int) = param
這裏是一個例子。考慮一個answer
函數返回一些Int
值:
def eagerEval(x: Int) = { println("eager"); x; }
def lazyEval(x: => Int) = { println("lazy"); x; }
現在執行兩者使用answer
:
def answer = { println("answer"); 40 }
和兩個功能,一是Int
按姓名採取Int
和一個以
eagerEval(answer + 2)
> answer
> eager
lazyEval(answer + 2)
> lazy
> answer
第一種情況是obvi ous:在致電eagerEval()
answer
進行評估並打印"answer"
字符串。第二種情況更有趣。實際上,我們將功能傳遞給lazyEval()
。 lazyEval
首先打印"lazy"
並評估x
參數(實際上,調用x
函數作爲參數傳遞)。
又見
10
只是爲了確保存在使用適當的期限答案:Scala語言規範使用術語的call-by-名:
值參數的類型可以用=>來定義,例如x:=> T。 這樣一個參數的類型就是無參數方法type => T。這表明 相應的參數不是在函數應用程序點評估的,而是 而不是在函數內的每次使用時評估。也就是說,參數 評估使用調用名爲。
6
4.6.1節要添加到托馬斯Nurkiewicz的回答以上,我之間遇到的差值()=> int和=> int是第二允許與裸塊調用:
scala> def myfunc(f :() => Int) = println("Evaluated: " + f)
myfunc: (f:() => Int)Unit
scala> def myfunc2(f : => Int) = println("Evaluated: " + f)
myfunc2: (f: => Int)Unit
scala> myfunc({1})
<console>:9: error: type mismatch;
found : Int(1)
required:() => Int
myfunc({1})
^
scala> myfunc2({1})
Evaluated: 1
相關問題
- 1. 功能<T>與動態數量的參數類型
- 2. 參數類型'(On ....) - > Null'不能分配給參數類型`(Object) - > void`
- 3. 參數類型毀了我的功能<shui>
- 4. 確定的參數和類型參數的返回類型是給定C++ 11功能的功能
- 5. 類型和功能
- 6. 在TLD功能使用類型參數
- 7. 檢測功能參數類型
- 8. 功能的可變參數類型
- 9. Scala:帶參數化功能類型
- 10. 功能的對象類型和字符串型參數
- 11. 參數類型數量不可分配給參數類型字符串|功能
- 12. 類型錯誤:類型的參數「功能」不是可迭代
- 13. 功能與整型參數
- 14. 關於SWIFT功能,命名參數和類型管理
- 15. 平等參數類型可變參數模板功能
- 16. 約束較高kinded類型的功能1的參數和結果類型
- 17. 類型別名和多個參數列表功能類型推斷
- 18. 定義使用此類型作爲模板參數的類型和功能
- 19. ML - 數據類型和功能
- 20. ES6類,通功能參數
- 21. void'不能分配給參數類型'(value:User [],index:number)=>布爾型'
- 22. 功能與數據類型
- 23. 參數類型的「(SNAP:DataSnapshot)=>無效」是不能分配給類型的參數「(A:DataSnapshot)=>布爾」
- 24. Typescript Pick <> type failing:類型'「foo」'的參數不能分配給類型爲'Pick <Bar, "foo">'的參數'
- 25. 參數類型「無效」的是不能分配給類型「功能」
- 26. 斯卡拉功能=>爲參數
- 27. 打字稿:參數類型函數是不能分配給參數類型功能
- 28. 泛型類型參數和類型
- 29. 關於功能和參數
- 30. 的typedef參數和功能
將來會使用[Symbol Hound](http://symbolhound.com)。 – 2012-03-01 16:29:13
[Scala - '=> SomeType'是什麼意思?](http:// stackoverflow。com/questions/7225308/scala-what-do-sometype-means) – 2012-03-01 16:29:30
不知道我是怎麼沒找到它的......認爲我應該換我的眼鏡...... :) – PrimosK 2012-03-01 19:59:08