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

  • 0
    いいね
  • 1
    コメント
    この記事は最終更新日から1年以上が経過しています。

    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>