Skip to content
yowasou edited this page Aug 13, 2023 · 3 revisions

メタプログラミングRuby読書会

範囲:第1章 月曜日: オブジェクトモデル1.5〜第2章 火曜日: メソッド

1.5

1.6

  • p.68 メソッド探索しているあいだ、selfはbオブジェクトに固定されている、でおk? (kiwofusi)

  • 最初に呼ばれたレシーバは変わっていない。

  • selfは探索中に移り変わっていく?

  • 探索の時にはselfは移り変わっていかない。

  • 「…メソッド探索が再度開始されるわけだ」これをするとどういういいことがあるのか?理由は? なぜselfからもう一度いちいち探索するの?

  • オーバーライドされている可能性があるから。

  • p.68-69 「上記のコードでは、Bookクラスの ancestors() メソッドが暗黙的に呼び出される(中略)クラス定義の中では、クラスが self だから」の意味がわからない。 (kiwofusi)

    • 追記:Bookクラスのなかでancestorsを実行しているが、このancestors = self.ancesotrs = Book.ancesotrs である、ということかな。ancestorsは暗黙的にBook.ancestorsである、と。 (kiwofusi) →◯
  • 普通はself.を付けて呼び出したほうがいい?

    • 通常は呼び出すときはselfを付けない。DSLはほとんどそう。
    • メソッドの定義するときは付けないといけないけど。付けないことがほどんどかも。

errata

  • p.63 下から2行目 @val → @var
  • p.64 最初の行 testing_sefl() → testing_self()

2.1 重複問題

2.2 動的メソッド

  • p77 confオブジェクトには admin= メソッド等が定義済み(定義されていると期待してもよい)なのでしょうか。続きを読むと、定義済み、動的メソッド、ゴーストメソッドのいずれかであるとわかり、流れ的にはここでは定義済みのような気がしますが、初読のときにイメージできず悩みました。 (kiwofusi)

  • どういう実装かは分からないけれど、method_missing()で勝手に作られたのでは

  • そういうメソッドが実は定義されているのでは?

  • p77 conf.send("#{k}=", v)となっているが、=を付けなければならないのか。メソッドの命名規約?(sea_mountain)

  • そういう規則 attributeの宣言の仕方

  • attr_accessor :title

  • def admin=(val)という宣言方法の2種類がある。

  • p80 コード例、componentメソッド内の"get_#{name}_price"のnameはto_sしなくてもいい?(sea_mountain)

  • 式展開は「式の内容(を文字列化したもの)を埋め込むことができます。」( http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.bc.b0.c5.b8.b3.ab )とのことなので、暗黙的に to_s() されているのではないでしょうか(未検証)。 (kiwofusi)

  • capitalizeはStringのメソッドなので、to_sする必要がある

2.3 method_missing()

  • p89 「オブジェクトがゴーストメソッドを受け取り、なんらかのロジックを適用してから、他のオブジェクトに転送する」ですが、これを具体的に言い換えると、「Flickerオブジェクトがゴーストメソッド tags_getListUser() を受け取り、method_idを書き換える処理を適用してから、XmlSimpleオブジェクトに転送する」ということでしょうか。FlickerオブジェクトではなくXmlSimpleオブジェクトが主な仕事をしてくれるから、Flickerはプロクシ(代理)のようなもの、という認識でいいかな。 (kiwofusi)

  • 動的プロキシはFlickrオブジェクトがxmlオブジェクトに転送していることなのか? →◯

  • p90 この例でDelegateClassを使うメリットが良く解らない。(mackato)

    • 同感ですw (kiwofusi)
      • Assistantは仕事を割り振られるのではなく、Managerの補助をする(表面的にはManaerの仕事に見える)のでDelegateでおk (suchi)
      • delegateというとコールバックの連想をしてしまいがち
      • 追記(電総研のproxyサーバを思い浮かべる人と、C#などのイベントコールバック時のdelegate思い浮かべる人と)

2.4 クイズ: バグ退治

  • バグ概要
  • method_missingの中でまたmethod_missingが呼ばれている(metohd_missingのなかでさらにないメソッドを呼んでいる)
  • numberをスコープの外で呼んでしまっているから

2.5 もっとmethod_missing()

  • p100 「@hidden_methods ||= {}」の「||=」って何? (kiwofusi)
  • 初期化のイディオム
  • 別の書き方:@hidden_methods = @hidden_methods || {}

浜松Rails3道場 Routing編

routes.rbの書き方

  • コメントに書かれている通りにRouteを書くと、書きやすいし分かりやすい

  • コメントアウトされている部分で、必要箇所をコメントアウト解除していく

  • テスト書いて確認するのが一番いい方法

###初参加 Tyson

###今回の役割

  • モデレータ:mackato
  • 議事録:sea_mountain

KPT

  • 次回の役決め

    • ATND/アナウンス: @suchi
    • モデレータ: @tarya
    • 議事禄: @jacoyustrius
    • 発表者1: mackato
    • KPT: 全員野球
  • 予習前提のやり方がメタプログラミングRubyには合っている

  • http://f.hatena.ne.jp/suchi/20110514150802 参照

hamamatsu.rb#3 KPT

###フィードバック

Clone this wiki locally