Scala 2.8 language specification§6.26.5Eta Expansionでは、の最大部分式が必要であると述べていますが、これについての定義はありません。誰かがこれを明確にすることはできますか?Scala 2.8仕様§6.26.5Eta Expansionの "Maximal Sub-expression"とは何ですか?
6
A
答えて
4
次のことを考えてみましょう:
def list1 = { println("1st list!"); List(1, 2, 3) }
def list2 = { println("2nd list!"); List(4, 5) }
def empty = { println("Empty string!"); "" }
そして:ここ
scala> val foo = (list1 ++ list2).foldLeft(empty) _
Empty string!
1st list!
2nd list!
foo: ((String, Int) => String) => String = <function1>
(list1 ++ list2).foldLeft(empty)
は、メソッドの型の式で、list1 ++ list2
とempty
は文字通りそのあるその最大のサブ式で、あります最大の構成式。我々は、強制的にエタ拡張を行うのに、必要ではない場合もあるが、_
を使用している。
それは、我々は例えば機能foo
を、使用するたびに評価されるlist1 ++ list2
をたくない理にかなって、それは§6.26.5で説明した変換が実現-それがどのようなサブ式であることを確認します関数が作成される前に一度評価され、保存されます。
我々は-print
でREPLを開始したい場合、我々は(わかりやすくするために再フォーマット)、以下を見ていると思います:
$read$$iw$$iw.this.foo = {
<synthetic> val eta$0$1: String = $line5.$read$$iw$$iw.empty();
<synthetic> val eta$1$1: List = $line3.$read$$iw$$iw.list1().++(
$line4.$read$$iw$$iw.list2(),
immutable.this.List.canBuildFrom()
).$asInstanceOf[List]();
{
(new anonymous class anonfun$1(eta$0$1, eta$1$1): Function1)
}
};
あなたは正確に与えられたサブ式を構成するもの迷っている場合これは簡単なチェック方法です。<synthetic> val
で始まる行を探します。
関連する問題
- 1. Motion JPEGの仕様は何ですか?
- 2. コントローラの仕様と仕様の仕様
- 3. JPAとJDOの仕様の違いは何ですか?
- 4. Project Tango:コンストラクタのエクスポートwavefrontファイルフォーマットの仕様とは何ですか?
- 5. XMLとUnicodeの仕様:正当な文字は何ですか?
- 6. ジャスミン - ソースと仕様ファイルを結ぶものは何ですか?
- 7. RSpec:機能と要求仕様の違いは何ですか?
- 8. Google Colaboratoryのハードウェア仕様とは何ですか?
- 9. CPSファイル(カードパーソナライゼーション仕様)とは何ですか?
- 10. Cocoapod仕様とサブ仕様別フレーム
- 11. 最新のAndroidサポートのBLuetooth仕様は何ですか?
- 12. ナビゲーションバーの背景画像のiOS仕様/ガイドラインは何ですか?
- 13. Azure ADのMDMエンドポイントの仕様は何ですか?
- 14. umletのマークアップ言語の仕様は何ですか?
- 15. W3のDOM仕様では、StringとDOMStringの違いは何ですか
- 16. Promise/A +仕様の2.2.4項の背後にある意図は何ですか?約束/ A +の仕様の
- 17. TransactionSynchronizationRegistryの目的は何ですか? JTA仕様によれば
- 18. C++: "float"のprintf()フォーマット仕様は何ですか?
- 19. ActionScript 3の仕様はPDFですか?
- 20. 製品仕様と仕様を比較できる製品
- 21. 並行言語とは何ですか? Java言語仕様から
- 22. javascript - 同期モジュールと非同期モジュールの仕様は何ですか?
- 23. X-Forwarded-Proto HTTPヘッダの完全な仕様とは何ですか?
- 24. Altbeacon仕様とセットアップビーコン
- 25. OSGi仕様とJSR
- 26. 電子メール仕様の何が問題ですか?
- 27. はデコレータの仕様
- 28. RPM仕様ファイルで%defattrとは何を意味していますか?
- 29. kubernetesでは、YAML仕様のコマンド形式の違いは何ですか?
- 30. Java言語仕様:Javaの8仕様でJava ConditionalExpressionでLambdaExpression
"であり、これはちょうど文字通りその最大の構成表現である。まだ少し漠然としていると思います。純粋なFPがあればfoldLeft(list1 ++ list2)(空)_に対応するので、++(list1、list2)は2つの小さな部分式に応じて最大の式です(list1とlist2)リスト2)? – Felix
また、これは最も多くの場合、単純に引数式全体であると言うのは完全にオフですか? – Felix
値の型(およびこの種の変換を値として使用する必要があるメソッド型の式)として存在しない「メソッド型」の考え方は、最初は純粋なFPからかなり離れています。純粋なFPの例では、 'foldLeft'はすでに関数であり、この種の変換の必要はありません。一般に、最大部分式は、メソッドが他のパラメータリストの引数と一緒に呼び出される式になります。 –