Ruby

rubyでcoffee scriptのコンストラクタみたいなもの

More than 5 years have passed since last update.

CoffeeScriptのコンストラクタは名前に@をつけるだけでプロパティへの代入もしてくれる.それをrubyで組んでみた

class Class
    def instance_vars(*vars)
        class_eval <<-EOS
            alias initialize_ initialize
            def initialize(*args)
                #{ vars.inject(""){|code, var| code << "@#{var} = args.shift;"  }}
                initialize_(*args)
            end
        EOS
    end
end

class_evalのブロックを渡したら、initialize内でvarsが使えなかったので文字列にした。

使い方

class Pair
    attr_accessor :key, :val
    instance_vars :key, :val
end

pair = Pair.new(:hoge, 'aaa')
p pair #=> #<Pair:0x00000000defe90 @key=:hoge, @val="aaa">

initializeを使うことも出来るが、instance_varsを後ろに置かなければいけないのが難点。

class Person
    def initialize(upcase = false)
        @name.upcase! if upcase
    end
    instance_vars :name, :age, :sex
end

person = Person.new('John', 20, :male, true)
p person #=> #<Person:0x00000001a3ec50 @name="JOHN", @age=20, @sex=:male>