<< EmacsからMercurial | Home | 箱根の湯 >>
PR: 転職    ドメイン    電子機器    インプラント    転職サイト    ダイエット 食事    転職    コンタクトレンズ    流行キーワード    英会話   

パターンマッチは関数リテラルなのか。

scala> val func: Option[Int] => Int = { case Some(x) => x; case None => 0 }
func: (Option[Int]) => Int = <function>

だから、matchと組み合わせる必要なんて全然無くて、関数の替わりにどこでも利用できるわけだ。とすると、あのmatchってやつも、関数を引数にとる関数なんだろうか。ちょっと探してみたけど、見つからなかった。

 



Re: パターンマッチは関数リテラルなのか。

こんにちは。 { case ... }形式の関数リテラルは、 (arg) => arg match { case ... } という形の、matchを使った関数リテラルに展開されることになっています。また、match自体はメソッドでも関数でもなく、組み込みの構文という位置付けです。つまり、{ case ... }形式の関数リテラルは、通常の関数リテラル+matchのシンタックスシュガーということになります。

Re: パターンマッチは関数リテラルなのか。

なるほど。caseのみの形式は、シンタックスシュガーだったんですね。すっきりしました。ありがとうございました。

コメント追加 トラックバック送信
このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8