Skip to content

Instantly share code, notes, and snippets.

@k2works
Created December 22, 2014 06:09
Show Gist options
  • Save k2works/70f312eb3b6c0a80377b to your computer and use it in GitHub Desktop.
Save k2works/70f312eb3b6c0a80377b to your computer and use it in GitHub Desktop.
evalで動的にメソッドを定義
class AttrClass
def initialize
@attr = "attr"
end
def add_reader(instance_val_name)
eval <<-END_OF_DEF
def #{instance_val_name}
@#{instance_val_name}
end
END_OF_DEF
end
def add_writer(instance_val_name)
eval <<-END_OF_DEF
def #{instance_val_name}=(val)
@#{instance_val_name} = val
end
END_OF_DEF
end
end
attr_obj = AttrClass.new
attr_obj.respond_to? "attr" # => false
attr_obj.add_reader "attr"
attr_obj.respond_to? "attr" # => true
attr_obj.attr # => "attr"
attr_obj.respond_to? "attr=" # => false
attr_obj.add_writer "attr"
attr_obj.respond_to? "attr=" # => true
attr_obj.attr = "new val" # => "new val"
attr_obj.attr # => "new val"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment