回答
它意味着您可以運行的一段代碼。
因此,例如:
scala> def doTwice(op: =>Unit) = {op; op}
doTwice: (op: => Unit)Unit
scala> doTwice({println("Hi")})
Hi
Hi
在這種情況下,=>Unit
是{println("Hi")}
這裏的 「SOMETYPE」 爲單位,因爲println
不產生價值。如果它產生了Int
,那將是=>Int
。
這只是一種不帶參數的函數值。 Owen的例子很酷,只知道「A => B」是一個函數,其參數具有類型A,返回值類型爲B,「=> B」是不帶參數並返回的函數一個B型值。
它表示兩件事。首先,由於前綴=>
,它表示參數將通過by name。然後,它表示傳遞參數的類型必須是SomeType
。
有人混淆了這兩個,認爲=> SomeType
是一種類型 - 它不是。它是兩件事的結合:參數評估策略和參數類型。
因此,由名字叫簡要說明,如果維基百科的鏈接並沒有把事情說清楚,如果你有這樣的:
def f[A](x: => A) = { x; x }
f(some stuff)
然後斯卡拉將這樣執行此:
{ some stuff; some stuff }
論價值的看漲,會發生什麼情況更是這樣的:
val x = some stuff
{ x; x }
還要注意參數是總是按價值評估,但只有一次。按名稱呼叫時,參數決不會被評估(例如,如果它位於if
的非執行分支上),但可以多次評估。
[A]在這種情況下代表什麼?我曾在很多地方看過它,但仍然沒有看到它 –
@elimence這是一個_type parameter_。它是一種在聲明'f'處未知的類型,但在使用'f'的點處已知。函數'f'對所有類型'A'都是有效的,在這種情況下,'A'可以是什麼都沒有限制。我可以使用'A <:SomeConcreteType'來表示下邊界('A'必須是SomeConcreteType或它的子類型),'A>:SomeOtherType'('A'必須是'SomeOtherType'的超類) ,並且指出'A'必須是某個隱含參數的一部分,這會導致對'A'的任意限制。 –
謝謝丹尼爾,現在就明白了 –
- 1. Scala中SomeType [_]是什麼意思?
- 2. 什麼「ID <someType> variableName」是什麼意思在Objective-C
- 3. >> =是什麼意思?
- 4. Groovy,什麼意思 - >意思是
- 5. `^^^`和`〜>`是什麼意思?
- 6. 「 - >」是什麼意思?
- 7. <>是什麼意思?
- 8. <>是什麼意思?
- 9. 「=>」是什麼意思?
- 10. '=>'是什麼意思?
- 11. `()=> Unit`是什麼意思?
- 12. > var是什麼意思?
- 13. 「 - >」是什麼意思?
- 14. 「=>」是什麼意思?
- 15. <+>是什麼意思?
- 16. 「outer =>」是什麼意思?
- 17. {< >}是什麼意思?
- 18. $ this->是什麼意思?
- 19. 什麼是()=> {}是什麼意思?
- 20. Scala/Lift中的 - > _ =>是什麼意思?
- 21. class Foo {this:SomeTraitType =>是什麼意思?
- 22. 是什麼意思:是什麼意思?
- 23. 「typedef sometype sometype」有什麼意義?
- 24. scala外殼是什麼意思?
- 25. 這個Scala語法是什麼意思(_ *)?
- 26. 在Scala中$()是什麼意思?
- 27. 是什麼意思:+ scala中的行?
- 28. Scala中的protected [session]是什麼意思?
- 29. 在Scala中_ ::是什麼意思?
- 30. a >> = b是什麼意思?
哦,我明白了。謝謝!這是我討厭scala的原因。這是很荒唐的谷歌這樣的事情:)感謝上帝的好人和計算器:) – Arg
不錯的例子。在這裏,「op」被稱爲* call by *參數(而不是*由值*)。請注意,編寫'doTwice(println(「Hi」))''同樣適用。當你在Scala中調用一個函數時,語法不會指出你是通過* name *還是* value *傳遞參數。 –
@Arg [SymbolHound](http://symbolhound.com/)是你的朋友。 –