La seule différence entre les deux approches est que la seconde lancera uninitialized constant Object::SomeNamespace
si l'espace de nom n'a pas été déclaré précédemment.
Lorsqu'il est déclaré dans un seul fichier, j'opterais pour le premier parce que vous n'avez pas à répéter SomeNamespace
.
Lorsque j'utilise plusieurs fichiers, j'utilise également le second, pour éviter de rencontrer le problème suivant :
# in a.rb
require 'b'
module SomeNamespace
def self.animal
Animal.new
end
end
# in b.rb
class SomeNamespace::Animal
end
# irb
require 'a' # explodes with the uninitialized constant error
Cet exemple est peut-être artificiel, mais il est facile de le déclencher si votre base de code est un peu plus grande. J'utilise généralement la méthode explicite (votre première méthode) pour éviter cela.
Une chose qui peut être utile lors de l'utilisation de la deuxième forme est qu'elle détectera les fautes de frappe dans l'espace de noms.
Il ne semble pas y avoir de méthode établie pour créer des espaces de noms, Devise par exemple mélange les deux approches : premier , le deuxième .