Таким образом, я могу иметь что-то вроде этого ():Ruby: модуль А против класса A :: B
module A
class B
end
end
, а также я могу это (B):
class A::B
end
Зачем использовать A вместо B и наоборот?
Таким образом, я могу иметь что-то вроде этого ():Ruby: модуль А против класса A :: B
module A
class B
end
end
, а также я могу это (B):
class A::B
end
Зачем использовать A вместо B и наоборот?
Когда вы определяете
Второй вариант сохраняет отступы и более компактен, что полезно, когда вы хотите что-то написать A::B
в первый раз, вам нужно сделать первый вариант. В противном случае
A::B
в сжатом и независимом от других вещах в A
.
Потому что в варианте B модуль A должен быть уже определен. Есть также некоторые другие проблемы с этим вариантом. Вы можете прочитать об этом здесь http://techblog.thescore.com/how-you-nest-modules-matters-in-ruby/
Первое предпочтительнее, поскольку последнее вызывает исключение: 'NameError: неинициализированная константа A'. :-) Если, однако, вы пишете 'module A; end' перед классом A :: B', я не верю, что есть разница. Обычный метод, будучи более компактным и, возможно, более ясным, обычно используется. Конечно, если вы хотите создавать модули и классы «на лету», все ставки отключены. –
@CarySwoveland, почему я хотел бы использовать форму класса A :: B? – user1463822