ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。FunctionScalaスポンサーリンク前回はChisel-Bootcampの学習に戻りModule3.6を見ていった。www.tech-diningyo.info今回も引き続きModule3.6を進めていく。今日はScalaのunapplyだ。ジェネレータ:型についてunapply部分関数ジェネレータ:型についてunapply前回で見てきたようにScalaのmatchは値や型などさまざまものにマッチさせることが出来る。ケースクラスを使う場合には、以下のような使い方も可能だ。0}では、ここで実際に何が起きているのか??ということだが、その答えがunapplyになる。Scalaのケースクラスを宣言すると、コンパニオン・オブジェクトが生成され、その中に幾つかのメソッドが自動で定義される仕組みになっており、その生成されるメソッドの一つがunapplyメソッドになる。Bootcampの説明によると、、Scalaのunapplyメソッドは別形態の構文糖でmatch文に型によるマッチとマッチした型の値を変数に展開するという2つの機能を与えるとある。因みにこの例、Bootcampのコードだと何故かSomeGeneratorParametersが定義されてないので、適当に追加したものを使っている。自分の使ってたBootcampのデータが古かっただけでした。delayここで注目しておきたいのは以下の2点だ。true)のこと)、その値に対してのマッチが行われたのち、マッチ後の処理においてもその展開された値を使用することが可能になる。先ほどBootcampの説明を引用した部分に書いたようにこれはScalaの構文糖なので、前回見てきたmatchの構文を使って書くことももちろん可能だ。Bootcampで紹介されている例を見てみよう。これは前回見た型に対するマッチと、それをunapplyメソッドを使う形に直したものなので、やっている事自体は一緒になる。unapplyを使ったマッチ2番目。これはどちらもunapplyを使う形。この2つの違いは、マッチしたクラス自体へのリファレンスを保持するかどうかにある。これもやっていることは全く同じ。マッチしたSomeGeneratorParametersはsgで参照可能3番目。これは前回までのmatchで型+値でマッチするようなケースとそれをunapplyで書いたものの比較になる。書き方は違えど、意味的はこれも全部一緒。3つ目の例は若干野暮ったい。A)を作ると、コンパニオン・オブジェクトが生成されその中にunapplyが生成されると書いたとおり、通常のコンパニオン・オブジェクトを作成しただけではこれらのメソッドは定義されていない。この場合は自分でそれらのメソッドを定義しておけば使用することが可能になる。Function"の直訳。なんやねん、それってなったので、調べてみたら以下の記事がとっても分かりやすかったのでそちらを見てもらった方がいいかも。yuroyoro.hatenablog.com上記の記事から引用させてもらうと、これはなにかっていうと「特定の引数に対しては結果を返すけど、結果を返せない引数もあるような中途半端な関数」ですとのこと。Bootcampの例を見ていこう。以下のようになります。0という数式に当てはまらない数を入れると値を返さないのでisDefinedAtがfalseを返すpartialFunc3はpartialFunc1もしくはpartialFunc2に当てはまらないとfalseになる。上記の"partialFunc"と名のついたものが部分関数になる。中身は何らかのcaseを使ったマッチ処理が存在していて、なおかつ、それにマッチしない場合は値が戻らないような作りになっているものだ。"Something"}で、これだけじゃなくてorElseを使うと、関数同士を合成して新しい関数も作れる、、と。partialFunc2関数を合成できるってのは面白い。先に示したリンク先にあるMapの処理みたいにいろいろ使い途はありそうなので、いろいろ試してみる価値がありそう。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。