ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。BootcampのModule3.1のパラメタライズの2つ目の例について見ていった。www.tech-diningyo.info今日も引き続きModule3.1を見ていく。今日はパラメタライズの際に指定できるオプションとデフォルト引数についてだ。ジェネレータ:パラメータオプションとデフォルト引数まずはScalaの文法についての説明から。関数を実装した際に、戻り値がある場合、ない場合が混在するケースがある。通常をこれはエラーになるのだが、これを回避する方法がScalaには備わっている例題:Mapのインデックス間違いということで、まずは例題から。map("b")println(b)上記はScalaのMapを定義した後に、valにMapの値を設定しているコードになる。ammonite.$sess.cmd2$.<clinit>(cmd2.sc:-1)最初の1はprintln(a)の表示で、その後のbを定義する際に"キーが見つからない"という例外が発生する。上記の例外を回避するためにはMapクラスが提供しているgetメソッドを使えばいい。getメソッドを使うと抽象クラスOptionの値が返ってくる。このOptionは以下の2つのサブクラスを持っている。SomeNone先ほどの例題のコードをgetメソッドを用いて書き換えてみる。map.get("b")println(b)これを実行してみる。None先ほど発生していたjava.util.NoSuchElementExceptionは発生せず、代わりにNoneが返却される結果となった。結果だけ見るとなんてこと無いのだが、Bootcampの説明によると:後のセクションでわかると思うが、Optionは極めて重要だ。これはmatch文においてScalaの型と値をチェックするすることに使われるからだ。例題:GetとElse先のMapと同様にOptionもgetメソッドを持っている。このgetメソッドをNoneのインスタンスで呼ぶとエラーとなるが、このようなケースのためにデフォルト処理getOrElseが提供されている。None上記で見るとわかる通りsome/noneの両方でgetOrElseを呼んでエラーを回避することが出来ている。Libraryをチェック。expression.”デフォルト値を設定してる”ということのようだ。これを踏まえて先の実行結果を見なおしてみると、someの場合はインスタンス時にSome(1)として定義しているのでgetOrElseで1が返却されるnoneの場合は値がないのでgetOrElseの引数として与えた2が返却されるということになる。デフォルト値付きのパラメータオブジェクトや関数が多数のパラメータを持っている場合、それらを全て指定するのは面倒だしエラーの原因にもなる。Module1では名前付き引数とデフォルトパラメータを使って例が登場している。www.tech-diningyo.infoデフォルト値が都合の良い値である場合は良いが、時々そうはなっていないことがある。Optionを使うことで、必要な場合にのみデフォルト値を変更するような仕組みを作ることが出来る。例題:リセット・オプションさてChiselに話を戻そう。次に紹介するコードは、ただ単に入力を1サイクル遅延して出力するだけのモジュールだ。ここで注目すべきなのはモジュールの処理ではなくModuleのパラメータとその使用方法にある。Noneとあるようにデフォルト値として先ほど紹介したOptionのサブクラスNoneを設定している。このオプションの値により生成されるRTLの違いについて確認してみよう。DelayBy1)生成されるRTLは以下の様にリセット無しのレジスタ生成される。DelayBy1(Some(3.U))こちらの結果は以下の様にリセット付きのレジスタとなる。endendmoduleこの例で見たようにOptionを使うことで、通常の値の範囲にある-1のような値を"none"を示す値として使用すると言ったようなありがちだが、不格好な実装を避けてリセット無しのレジスタを生成することが可能になる。Optionという一つの仕組みを一通り見てChiselでどう使うかを確認しただけなのだが、結構な分量になったので今日はここまでにする。次回はScalaのMatch文の使い方についてで、ここで今回勉強したOptionが再度登場することになる。してもModule3.1、ボリューム多いな。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。