只是为了好玩-通过块向对象添加方法
|
再说一次,只是为了好玩,但是有可能采取一个包含方法定义的块并将它们添加到对象的方式吗?下面的代码行不通(我从没想到过),但是这样您就可以了解我正在玩什么。
我确实知道我可以用
class << existing_object
重新打开一个类并以这种方式添加方法,但是代码是否可以在块中传递该信息呢?
我想我想在这里借用一点Java思维。
def new(cls)
obj = cls.new
class << obj
yield
end
obj
end
class Cat
def meow
puts \"Meow\"
end
end
cat = new(Cat) {
def purr
puts \"Prrrr...\"
end
}
cat.meow
# => Meow
# Not working
cat.purr
# => Prrrr...
编辑|这是以上版本的工作版本,基于edgerunner的回答:
def new(cls, &block)
obj = cls.new
obj.instance_eval(&block)
obj
end
class Cat
def meow
puts \"Meow\"
end
end
cat = new(Cat) {
def purr
puts \"Prrrr...\"
end
}
cat.meow
# => Meow
cat.purr
# => Prrrr...
没有找到相关结果
已邀请:
2 个回复
嘘崇蔡对
(也别名为
)或
在类/模块或对象实例的上下文中评估块。
厦惫
作为记录,这不是动态添加方法的常用方法。通常,动态方法以块本身的形式开始生存,例如,参见* Module#define_method *。