【发布时间】:2019-04-19 02:19:30
【问题描述】:
我只是没有得到这个问题的答案。我想在对象实例的时刻输入一个条件来动态地创建一个方法。我可以使用我测试的其他条件创建该方法,但在其他情况下它不起作用。这是我的代码:
class Animal
def initialize(live, swim)
@live = live
@swim = swim
end
def live?
@live
end
def swim?
@swim
end
end
class Bird < Animal
def initialize(live, swim, fly)
super(live, swim)
@fly = fly
end
define_metod(:flying) {puts "flying high"} if @fly
end
Bird.new(true, true, true).flying
我还尝试了其他各种方法来做到这一点。错误是没有创建“飞行”方法:
Traceback (most recent call last):
main.rb:23:in `<main>': undefined method `flying' for #<Bird:0x000056382015df98 @live=true, @swim=true, @fly=true> (NoMethodError)
【问题讨论】:
-
你试过没有
if @fly吗? -
我假设
define_metod在您运行的代码中拼写正确。 -
Bird的实例变量@fly从未赋值,因此它的计算结果为nil,这是错误的,因此条件将始终为错误,define_method将永远不会被执行.