-
Notifications
You must be signed in to change notification settings - Fork 8
議事録(3)
範囲:第1章 月曜日: オブジェクトモデル1.5〜第2章 火曜日: メソッド
1.5
-
p.63「すべてのインスタンス変数はselfのインスタンス変数になる」の意味がわからない(suchi)
-
self(=レシーバ)というコンテキストの中でのすべてのインスタンス変数という意味ではないかと思う。(mackato)
-
p.64 「トップレベル」の「mainと呼ばれるオブジェクトの内部にいる」mainはどこで定義されている? mainオブジェクトは実態としてあるの?(suchi)
-
インタプリタが自動で作っているのでは?
-
オブジェクトの中にメソッドがある。mainに定義されているわけではない。勘違いしてたのかも
-
トップレベルに自動的にmainを生成している。そこからインタプリタが始まるということか。(suchi)
-
Rubyでインスタンス変数同士を比較したいときはどうするのが正しい? (ke_tachibana)
-
compareメソッド。
-
アクセサをつけるしかなさそう…
-
instance_variable_getとかやればできそうだけれど…
-
protectedのメソッドを定義しているコンテキストでは呼べる。
-
※C++とかのprotectedとは違うから確認
-
追記
-
p65 privateとprotectedはレシーバを指定してアクセスできるという違いだけなの?
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思い浮かべる人と)
- 同感ですw (kiwofusi)
2.4 クイズ: バグ退治
- バグ概要
- method_missingの中でまたmethod_missingが呼ばれている(metohd_missingのなかでさらにないメソッドを呼んでいる)
- numberをスコープの外で呼んでしまっているから
2.5 もっとmethod_missing()
- p100 「@hidden_methods ||= {}」の「||=」って何? (kiwofusi)
- 初期化のイディオム
- 別の書き方:@hidden_methods = @hidden_methods || {}
routes.rbの書き方
-
コメントに書かれている通りにRouteを書くと、書きやすいし分かりやすい
-
コメントアウトされている部分で、必要箇所をコメントアウト解除していく
-
テスト書いて確認するのが一番いい方法
###初参加 Tyson
###今回の役割
- モデレータ:mackato
- 議事録:sea_mountain
-
次回の役決め
- ATND/アナウンス: @suchi
- モデレータ: @tarya
- 議事禄: @jacoyustrius
- 発表者1: mackato
- KPT: 全員野球
-
予習前提のやり方がメタプログラミングRubyには合っている
###フィードバック
- メタプログラミングを2ミリも知らない俺がRubyの魔術に手を染めてみた - 反言子
- Hamamatsu.rb#3 - 徒然なるままに
- ↑ブログ等をはっていきましょう