これまで、他の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 件のコメント:
コメントを投稿