我有两个类(我不能将它们组合在一起),每个类都在自己的文件中 文件编号1:
class A
def say_hi
puts "Hi"
end
end
文件编号2:
class B
def say_bye
puts "bye"
end
end
我能做到:
apple = A.new
apple.say_hi
或者:
baby = B.new
apple.say_bye
但如果我想这样做:
apple = A.new
apple.say_bye
或者:
baby = B.new
baby.say_hi
有没有一种简单的方法可以在不重组我的课程的情况下做到这一点?
答案 0 :(得分:0)
如果是"我应该实例化哪个类?"而你所知道的就是你想要的方法" say_hi"那你可以做......
method = :say_hi
if A.new.respond_to?(method)
runner_object = A.new
else
runner_object = B.new
end
Rails中的主动支持可以让你......
result = A.new.try(:say_hi) || B.new.try(:say_hi)
答案 1 :(得分:0)
如果我理解正确,你需要从流程中调用这些不同的方法,这些方法可以获得其中一个类。
最简单的方法是使用alias_method
:
class A
def say_hi
puts "Hi"
end
alias_method :say, :say_hi
end
class B
def say_bye
puts "bye"
end
alias_method :say, :say_bye
end
apple = A.new
apple.say
# => "Hi"
baby = B.new
baby.say
# => "bye"
如果您无法使用class_eval
实际更改类代码,您甚至可以这样做:
A.class_eval { alias_method :say, :say_hi }
B.class_eval { alias_method :say, :say_bye }