# 第3回 メタプログラミング Ruby輪読会 * 日時:12/6(月) 20:30〜 * 読む箇所: `2.3 クイズ:引かれていない線` + `2.4.1 メソッド探索` ## 流れ 1. 前回の振り返りを行う * 前回のまとめ * 次にやってみること 2. 読む箇所を簡単に読み合わせる 3. 質問があれば解説する 4. 振り返り ## 前回の振り返り ### 前回の内容での質問 - @neutral - 定数はクラスかモジュールの中でしか定義されない? - ↓ 「前回やってみたこと」にある✅ のところ。(今日の`2.3 クイズ:引かれていない線`をやれば、分かるかもしれないです。) ### 前回のまとめ * Ruby にはオープンクラスという概念があり、定義済みのクラスに対して後からメソッドを追加する事ができる * 既存のクラスにメソッドを追加することを『モンキーパッチ』という * これを利用してよりオブジェクトに依存した形でメソッドを定義することができる * e.g. `100.to_money("USD")` ### 前回の次にやってみること - @neutral - 気になったこと・知識不足だと思ったことを復習 - クラスとしてのClass - Module - 定数 - 22pの図が混乱したので、整理しようとしてみた。`class`メソッドと`superclass`メソッドが混乱している? - `class`メソッド - `superclass` るりまから拝借、、、 - `class`メソッド Object#class ```ruby class -> Class # レシーバのクラスを返します。 ``` - `superclass`メソッド Class#superclass ```ruby superclass -> Class | nil # 自身のスーパークラスを返します。 File.superclass #=> IO IO.superclass #=> Object class ;Foo end class Bar < Foo; end Bar.superclass #=> Foo Object.superclass #=> BasicObject ``` スーパークラス? [Ruby用語集 (Ruby 3.0.0 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/doc/glossary.html#sa) >スーパークラス superclass > クラス B がクラス A のサブクラスであるとき、A を B のスーパークラスと呼ぶ。「親クラス」「上位クラス」と呼ぶこともある。 > Ruby では BasicObject を除くすべてのクラスがただ一つのスーパークラスを持つ(BasicObject はスーパークラスを持たない)。スーパークラスは Class#superclass で得られる。 ✅ ここまで調べてみて、「どうして22pの図で、Myclassから遡る2方向が2つできてしまうのか」が、分からない。 「クラス」と「親クラス」と言う時の、「クラス」が指しているものが違うもの? ## 質問 - @maki メソッドの探索について質問 https://scrapbox.io/MetaproRubyReading/21.12.06_%E7%AC%AC3%E5%9B%9E_%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E6%8E%A2%E7%B4%A2_maki ## YWT: やったこと・わかったこと・次にやってみること ### やったこと - @osyo - まとめを用意したけど虚無になった :sob: - 他の人の話を聞くことができた! - @maki - いろいろ質問できた。 - 進行や目的について話せて読書会がよくなっていく気がする。 - @neutral - それぞれのやりたいことや、違うことを出し合えたのが良かった。こんな風に学び方を作りながら、進めていけるといいのでは。 ### わかったこと - @chiroru - classメソッドは、生成元を見る。superclassメソッドは、親クラスを見る。 - オブジェクトはそれぞれインスタンス変数を持つ - シンボルはタグ情報。同じオブジェクトになる - Moduleもクラスオブジェクト - @neutral - classメソッドとsuperclassメソッドで調べたいことの系統が全然違った。 - 同じように見えて違うオブジェクトだったり、シンボルの場合は同じだったり。シンボルがなぜ早いのかが分かった。 - @maki - 数値もシンボルと同じでオブジェクトIDが変わらないことを知った。 - 定数探索とメソッド探索は違う。 ### 次にやってみること - @osyo - scrapbox でやっていきたい! - Ruby のコードを書いて説明していきたい - 読む範囲を調整していきたい - @neutral - 継承と親クラス(生成元)の違いを、もっと整理しておきたい。 ## ログ * 第1回:https://hackmd.io/I-66s8lOTBKTGie5o5zTsQ * 第2回:https://hackmd.io/L7PFDXRjSVmZKew6c3OccA * 第3回:https://hackmd.io/Mv2_jdZGRoCzho_Bx5KgVA <!-- ここからテンプレ # 第一回 メタプログラミング Ruby輪読会 * 日時: * 読む箇所: ## 流れ 1. 前回の振り返りを行う * 前回のまとめ * 次にやってみること 2. 読む箇所を簡単に読み合わせる 3. 質問があれば解説する 4. 振り返り ## 前回の振り返り ### 前回のまとめ ### 前回の次にやってみること ## 質問 ## YWT: やったこと・わかったこと・次にやってみること ### やったこと ### わかったこと ### 次にやってみること ## ログ * 第1回:https://hackmd.io/I-66s8lOTBKTGie5o5zTsQ * 第2回:https://hackmd.io/L7PFDXRjSVmZKew6c3OccA * 第3回:https://hackmd.io/Mv2_jdZGRoCzho_Bx5KgVA ここまでテンプレ -->