このcommentの中で、@Benは、名前による呼び出しは、値がゼロ引数の関数である値による呼び出しと同等であることを提案しました。ゼロ引数の関数として解釈される値を持つ値による呼び出しと名前による呼び出し
私が正しく理解している場合、def callByName(x: => Int) = {
// some code
}
callByName(something())
は
def callByValue(x:() => Int) = {
// same code as above, but all occurrences of x replaced with x()
}
callByValue(()=>something())
(::@MichaelZajac、@LukaJacobowitzで指摘したように、私は署名の誤りを修正し、もともと、それがcallByValue(x: Int)
述べています。編集)に相当します
言い換えれば、 "名前で呼び出す"コンセプト全体は文法的な砂糖に過ぎません。「価値のある呼び出し」を使ってすべてのことが達成できます(いくつかの追加のキーストロークで)。真の場合は、名前による呼び出しを非常に理解しやすくなります。実際、私はこの技術をPythonで使っています(Pythonはファーストクラスの関数を持っています)。
さらに、commentsの下では、議論がやや複雑になり、それほど簡単ではないという気持ちが残っていました。
"名前で呼び出す"より重要なことがありますか?それとも、コンパイラによるゼロ引数関数の自動作成ですか?