6

I am new to Scala. I have been searching but there is no easy "search string" for the seemingly easy question I have.

def foo( f: (String) => String ){println(f("123"))}
foo{_+"abc"} //works

def bar( f :() => String ){println(f())}
bar{"xyz"} // why does this not work?

def baz( f: => String ){println(f)}
baz{"xyz"} //works

Why does the second (bar) not work?

4

3 に答える 3

6

2 番目bazは、関数リテラルではなく、名前による呼び出しパラメーターであるため機能します。基本的に、それが行うことは、プログラムで必要になるまで引数の計算の瞬間を遅らせることです。これについては、この質問でも読むことができます。あなたはbar次のような関数を渡すだけですbar{() => "xyz"}

于 2013-05-04T08:56:32.240 に答える