0
參考SO中的以下問題,將Unit
傳遞給函數而不是()
(反之亦然)的用處是什麼?將`Unit`傳遞給Scala中的函數的目的是什麼
Functions without arguments, with unit as argument in scala
參考SO中的以下問題,將Unit
傳遞給函數而不是()
(反之亦然)的用處是什麼?將`Unit`傳遞給Scala中的函數的目的是什麼
Functions without arguments, with unit as argument in scala
從我可以告訴你想知道的是什麼這兩個方法定義之間的差異,以及爲什麼會使用單位超過()函數中的參數。
def func1(f:Unit=>String) = {
println(f)
}
def func2(f:()=>String) = {
println(f)
}
的差異可以通過查看該代碼的輸出予以強調:
func1(Unit => "hello")
func2(() => "hello")
你可能會驚訝地看到這樣的輸出:
<function1>
<function0>
單位=>字符串實際上是一個參數爲1的函數。 While()=> String是一個帶有0個參數的函數。
在Scala中()可能意味着兩件事
在func2中,它是一個沒有參數的函數。
func1中的「Unit」實際上是scala包(其中只有一個值「Unit」或「()」)的抽象類。因此,當定義函數Unit => String時,我們定義的是一個函數,它將Unit類型的參數作爲參數,並返回一個值。不是不帶參數的功能。
最後的調整的代碼以突出的區別:
def func1(f:Unit=>String) = {
println(f(Unit))
}
def func2(f:()=>String) = {
println(f())
//println(f(Unit)) - does not compile
}
func1(Unit => "hello")
func2(() => "hello")
將輸出你好兩次。
我建議FUNC2或()通常是人們想要什麼,而不是FUNC1或「單位」
我會假設你只是強調一個事實,即函數必須有一些參數,甚至其目前Tuple0即所以你可以在將來擴展事物。把它作爲一個選項來表達你的原創設計理念。 – Pavel
你可以編輯你的問題,包括一些代碼,準確地顯示你的意思嗎?一個英文短語如「將'Unit'傳遞給函數」是不明確的,代碼是確定的。 –