ボクココ

個人開発に関するテックブログ

2012-05-27から1日間の記事一覧

オレオレ attr_accessor

なんとなーく クラスマクロを理解したので、その代表格であるattr_accessor を自分で実装してみた。 1 class MyClass 2 p self # -> MyClass 3 def self.my_accessor name 4 p self #-> MyClass 5 define_method "#{name}=" do |v| 6 p self #-> # 7 @name =…

instance_eval と class_eval

にしても難解なRuby。これを理解するのに本を何度も読み直さないとわからない。 自分なりのメモなので間違っているかもしれませんがその時は指摘してくれるとうれしいです。instance_eval obj.instance_eval do #そのオブジェクトのクラス定義のコンテキスト…

呼び出し可能オブジェクト

なんかの処理をまとめるとき、通常はdef を使いますね。 ですがdef はdefの外側にある変数を読み込めません。(スコープ) なのでlambda を使ってオブジェクト上のコンテキストで読み込めるようにするのです。 1 b = 1 2 def add a 3 puts a + b 4 end 5 6 a…

スコープとクラスメソッドの疑問

メタプログラミングRubyでフラットスコープについて学んだ。 でもこれから一つの疑問が生じた。 1 my_var = 1 2 puts "myvar:#{my_var} was called at the top level" 3 4 MyClass = Class.new do 5 my_var += 1 6 puts "myvar:#{my_var} was called at the …

Ruby method_missing

引き続き前回の続き。。前回のと同様に method_missing を実現するとどうなるだろう? 45 class Hoge3 46 def method_missing(name, *args) 47 if name =~ /hoge/ 48 p "#{name} was called..." 49 p "Whohooo!" 50 else 51 super 52 end 53 end 54 end 55 5…

Ruby 動的メソッド

前回の続き。 今回は重複するクラスの中のメソッドをリファクタリングしてみよう。 こんなクラスがあったとする。 1 class Hoge 2 def hoge1 3 p "hoge1 was called..." 4 p "Whohooo!" 5 end 6 7 def hoge2 8 p "hoge2 was called..." 9 p "Whohooo!" 10 en…

Ruby 動的ディスパッチ

今日は基礎に戻ってRubyの学習。動的ディスパッチに関してメモ。動的ディスパッチ実行時に呼ぶメソッドを柔軟に変えたいときとかに send() を使う。 これが中々面白いのでいろいろ実験してた。 Test:Unitとか基本的にはメソッド名の先頭にtest_ をつけている…