1

渡しの場合

val f: (Int) => Int = {(i) => {i * i}} # f: Int => Int = <function1>
の省略形です
val f: Function1[Int, Int] = {(i) => {i * i}} # f: Int => Int = <function1>

次に、名前 で呼び出す場合は?
val f: (=> Int) => Int = {(i) => {i * i}} # f: (=> Int) => Int = <function1>
の省略形です 。
何 ?

で、もし

値による呼び出し時

val f = {(i) => {i * i}}:(Int) => Int # f: Int => Int = <function1>
の省略形です
val f = {(i) => {i * i}}:Function1[Int, Int] # f: Int => Int = <function1>

次に、名前 で呼び出す場合は?
val f = {(i) => {i * i}}:(=>Int) => Int # f: (=> Int) => Int = <function1>
の省略形です 。
何 ?

言い換えると

if (Int) => IntFunction1[Int, Int]の短縮形です

then (=> Int) => Int?の省略形です。何 ?

ありがとうございました !

4

2 に答える 2

1

それは何かの省略形ではありません。名前による型は、名前による型です。SLS 4.6.1、http: //www.scala-lang.org/files/archive/spec/2.11/04-basic-declarations-and-definitions.html#by-name-parameters を参照してください。

結果のバイトコードを見ると、引数が として渡されることがわかりますが、それFunction0はバイトコードレベルの実装の詳細です。言語レベルでは、名前による型は単なるシンタックス シュガーではありません。それらは実際の型です (ただし、他のコンテキストではなく、パラメーター型としてのみ表示できます)。

参照: Scala by name パラメーターの使用

于 2015-05-11T12:25:32.190 に答える