Следующий код работает, но я не понимаю, почему. У меня есть два файла. Первым является класс с именем walmart.rb
, расположенный в active_market/walmart.rb
. Вот определение класса:
module ActiveMarket
class Walmart
def test_one
puts "test one"
end
end
end
Для моего Walmart
класса у меня есть "реализации API" для API Walmart, такие как Order, Fulfillment, Report и др. c. Поэтому я создал папку и другой класс для своей первой реализации 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
классов будет полностью переопределен. Есть ли какие-либо недостатки в этом, или я должен изменить свою реализацию?
Заранее спасибо.