新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

Scalaで遊んでました。クロージャ

2018-06-11 15:13:12 | Scala

 クロージャの意味が本を読んだだけでは理解出来ませんでしたが、サンプルをやってみたらこのこと?と思い当たりました。val more = 1としてval addMoreを定義します。この時のmoreは1です。addMore(10)は結果11です。var more = 9999としました。エラーになりません。もう一度addMore(10)をしても結果は11です。Kop本に自由変数の束縛を「取り込んで」、関数リテラルを「閉じる」ことから付けられたとあります。自由変数はmoreです。しかもaddMoreではmoreは10です。addMore2ではmoreは9999です。何かこのことを言ってる気がします。

 決して難しくてクロージャと言ってるようでは無いです。作った人はですが?(-_-;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Scalaで遊んでました。部分適用された関数

2018-06-11 10:50:38 | Scala

 上の図ではdef sumの定義の仕方が、Kop本のつもりでやったら、そうはいかず失敗。{a+ b+c}で旨く行ったんですが、(-_-;)  sum(1,2,3)は6です。後はval a = sum _と書いて、aがsumの別名になった感じです。val bはsumの別名になった感じですが、両端は指定されていて、内のが真ん中の数値です。

foreach(println _)とかforeach(println)と書けるようです。foreachは引数として関数を必要としてるようです。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Scalaで遊んでました。プレースホルダー構文

2018-06-11 09:52:23 | Scala

 プレースホルダー構文の例でKop本にはsomeNumbers.filter(_ > 0)の例が載ってます。結果はList(5,10)で前回の例と同じです。今回はそれが2個ある例です。でもあれば便利かもしれませんが、同等のものをdef plusIntgerとしてやってみました。でも知らないと、何をやってるのか見当が付かない、そんなことになりそうです。(-_-;)

 プレースホルダー構文が使えるのは、個々のパラメータが関数リテラル内で確実に一回しか使われない場合に限ると言うことです。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Scalaで遊んでました。一人前の存在としての関数

2018-06-11 09:04:36 | Scala

 Kop本の8.3には一人前の存在としての関数とタイトルがあります。その中に太字で関数リテラルとか、値としての関数とかが書かれてます。微妙な違いが分かりません。上の図ではsomeNumbersの確保の仕方は大事ですし、foreachの使い方の中を見ると、関数リテラルですか?それの定義が入ってます。

filterの使い方覚えておきますか?filterの結果を代入は勿論出来ます。それをforeach使ってprintlnしました。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする