タグ

2012年12月5日のブックマーク (2件)

  • Rubyのmethod_missingを使って黒魔術を実装する - (゚∀゚)o彡 sasata299's blog

    2010年01月27日09:23 Ruby Rubyのmethod_missingを使って黒魔術を実装する Rubyにはメソッド探索の最後に呼ばれる(つまり、メソッドが見つからないときに呼ばれる)フック的なメソッドとして method_missing というメソッドがあります。これを上手に利用することで黒魔術的なコードが書けてかっこいいですw #!/usr/bin/ruby module Sasata299 # 適当なモジュールを定義 def hoge(num) return num * 2 end def fuga(num) return num + '299' end end def method_missing(action, *args) if action.to_s =~ /(.+)_(.+)/ eval "include #{$1.capitalize}" __send__ $

    love0hate
    love0hate 2012/12/05
    これがActiveRecordの黒魔術、動的ファインダの仕組みか。
  • JavaやC#の常識が通用しないRubyのprivateメソッド - give IT a try

    衝撃を受けたできごと 最近Rubyを勉強しています。 JavaやC#でオブジェクト指向プログラミングの基はマスターしてるから、Rubyもそのあたりは楽勝〜!・・・と思っていたら、JavaやC#の常識が全く通用しない振る舞いに遭遇してかなり衝撃を受けました。それは、 privateメソッドはサブクラスからも呼び出せる ・・・ということです!!がーん。 たとえば、JavaやC#だと自分のクラス内でprivateメソッドが使われていない場合、不要なメソッドとして削除できます。(リフレクションを使って呼び出される可能性はここでは無視ね) しかし、Rubyでは誰かがサブクラスを作って呼び出している可能性があるので、privateメソッドを削除する場合は注意が必要です。メソッド名を変更する場合も同様ですね。 また、知らずに親クラスと同名のprivateメソッドを定義すると、予期せず親クラスの実装をオ

    love0hate
    love0hate 2012/12/05
    とりあえずprotectedなんて無かったんだって考えればよさそうだな。