LoginSignup
0
0

More than 5 years have passed since last update.

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

Posted at

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>
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0