3 回答
TA貢獻1898條經驗 獲得超8個贊
Int.
def something() = {
println("calling something")
1 // return value}Intx: Intx: => Int).
def callByValue(x: Int) = {
println("x1=" + x)
println("x2=" + x)}def callByName(x: => Int) = {
println("x1=" + x)
println("x2=" + x)}scala> callByValue(something())calling something x1=1x2=1scala> callByName(something())calling something x1=1calling something x2=1
something()
TA貢獻1818條經驗 獲得超8個贊
def test (x:Int, y: Int)= x*x
test (2,3)
test (3+4,8)
test (7,2*4)
test (3+4, 2*4)
TA貢獻1863條經驗 獲得超2個贊
我認為最好把“逐名”看作是語法糖。解析器只是將表達式封裝在匿名函數中,以便在以后使用時調用它們。
實際上,而不是定義
def?callByName(x:?=>?Int)?=?{
??println("x1="?+?x)
??println("x2="?+?x)}和跑步:
scala>?callByName(something())calling?something x1=1calling?something x2=1
你也可以寫:
def?callAlsoByName(x:?()?=>?Int)?=?{
??println("x1="?+?x())
??println("x2="?+?x())}并按以下方式運行,效果相同:
callAlsoByName(()?=>?{something()})calling?something
x1=1calling?something
x2=1添加回答
舉報
