高階関数

前述の通り,関数をパラメータとして取るメソッド(mapforeachの様な)は中値記法で呼び出すべきですが,次の様に呼び出すことも可能ではあります。

names.map { _.toUpperCase }     // 誤り!

この呼び出し方は標準としては到底受け入れられません!というのも,メソッドチェインの場合に問題があるからです。

// 誤り!
names.map { _.toUpperCase }.filter { _.length > 5 }

// 正しい!
names map { _.toUpperCase } filter { _.length > 5 }

これらは共に意図通りに動作しますが,前者は,極めて非直観的なScalaの文法の欠点を不当に利用したものです。途中の{ _.toUpperCase }.filterの部分を取り出して見ると,filterメソッドを関数値に対して呼び出している様に見えますが,実際には関数値をパラメータに取るmapメソッドの結果に対してfilterメソッドを呼び出しています。この構文はRubyではたびたび混乱の元になり,使用が推奨されていませんが,Scalaでは絶対に使いません。

前のトピックへ

1引数のメソッド

次のトピックへ

演算子

このページ

別のフォーマット

貢献