6

書く代わりに

((x: Double) => (((y: Double) => y*y))(x+x))(3)

のようなものを書きたいと思います

((x: Double) => let y=x+x in y*y)(3)

Scala にこの種のシンタックス シュガーのようなものはありますか?

4

2 に答える 2

14

確かにあります: それは " val" と呼ばれます。:-)

({ x: Double =>
  val y = x + x
  y * y
})(3)

もちろん、ここでは中括弧はオプションです。関数を定義するときは括弧よりも中括弧の方が好きです (結局のところ、これは Lisp ではありません)。キーワードは、現在のvalレキシカル スコープ内で新しいバインディングを定義します。Scala は、Lisp や ML などの言語とは異なり、ローカルに独自のスコープを定義することを強制しません。

実際には、varどの範囲でも機能しますが、使用するスタイルが悪いと考えられています。

于 2008-11-18T16:41:41.110 に答える
6

OK、これがバインディング付きのワンライナーです:

 ({ x:Double => val y = x + x; y * y })(3)

乾杯

于 2008-11-19T02:44:17.197 に答える