2015年7月9日木曜日

Scalaファンクショナルデザイン P45

Scalaファンクショナルデザインという本が出たので、読み始めてみた。簡潔で読みやすい。
これまで、他のScalaの本で読んで来たことを、振り返って、あいまいだった知識の整理に役立つ。

2行目から
 関数オブジェクトは、Function1トレイトやFunction2トレイトをインスタンス化して作られたオブジェクトです。

7行目から
 ~関数オブジェクトは、変数に格納できるなど、値としての性質を持つことから、クラスでもメソッドでもなく、オブジェクトの一種と考えるのが妥当でしょう。
 とある。最初、意味が分かりにくかったが、何回か読み直して、なんとなく理解?した。
 関数オブジェクトは、「関数のはたらき」そのものであり、そのはたらきそのものを、変数に格納できるということであり、またそのはたらきを、値とみなすということ。値とみなせるんだから、どちらかといえば、オブジェクト(インスタンス化したもの)だろう。。ということだろうか。

したから7行目より
FuncitonXトレイトにはapplyという抽象メソッドが宣言されており、apply本体が関数本体そのものになります。まず、 関数リテラルが評価されると、FunctionXによるオブジェクトがつくられ、そのときに関数リテラルの「=>」記号の右側がapplyの処理内容として実装されます。以後、関数呼び出しをするとapplyの内容が実行されます。

fun(123)はfun.apply(123)と等価とすることで、fun(123)のように関数呼び出しの形に見えるようにしているということ?と理解したが、いいんだろうか。

P40でapplyの存在理由についてふれている。
 fun.apply(123)の例で、ここには関数というものがない。そして、メソッドがないと処理手続きができない。 
funは、関数オブジェクトが格納された変数。 実際にはfun関数を呼び出すというのは、格納されているオブジェクトのapplyメソッドを呼び出すことにあたる。

0 件のコメント:

コメントを投稿