以下代码有效,但我不明白为什么。我有两个文件。第一个是walmart.rb
位于的类active_market/walmart.rb
。这是类的定义:
module ActiveMarket
class Walmart
def test_one
puts "test one"
end
end
end
对于我的Walmart
班级,我有沃尔玛API的“ API实现”,例如Order,Fulfillment,Report等。因此,我在上为我的第一个API实现创建了一个文件夹和另一个类active_market/walmart/order.rb
。
这是Order
类的定义:
class ActiveMarket::Walmart
def test_two
puts "test two"
end
class Order < ActiveMarket::Walmart
def test_all
test_two
test_one
end
end
end
我希望能够打电话ActiveMarket::Walmart.new
也ActiveMarket::Walmart::Order.new
。为了做到这一点,我不得不再次定义类,ActiveMarket::Walmart
如上所示,并将Order
该类放置在里面。这按预期工作,但我不明白为什么我能够成功调用所有这三个函数。
ActiveMarket::Walmart.new.test_one
ActiveMarket::Walmart.new.test_two
ActiveMarket::Walmart::Order.new.test_all
那么,问题是为什么这行得通?为什么我可以同时在两个完全不同的文件中定义的同一类中调用test_one
和test_two
函数?我原本希望其中一个ActiveMarket::Walmart
类被完全覆盖。这有什么缺点吗?还是应该更改实施方式?
提前致谢。
Ruby允许重新打开现有的类并向其添加其他方法,或覆盖现有的方法。
在您的示例中,实际上只有一个ActiveMarket::Walmart
类定义了两个实例方法。尝试这个:
walmart = ActiveMarket::Walmart.new
walmart.test_one
#=> test one
walmart.test_two
#> test two
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句