Est-ce qu'il y a des inconvénients si j'utilise Object comme nom pour ma classe dans le module?'Object' classe nommée dans Ruby
module Some
class Object; end
end
Est-ce qu'il y a des inconvénients si j'utilise Object comme nom pour ma classe dans le module?'Object' classe nommée dans Ruby
module Some
class Object; end
end
Object
est un mot réservé dans Ruby, donc vous ne devriez pas l'utiliser comme un nom pour votre classe.
En fait, ce code devrait fonctionner sans problèmes, puisqu'il se trouve dans un module et donc dans un espace de noms. Pour un test simple:
module Some
class Object
def foo
"bar"
end
end
end
Some::Object.new.foo # "bar"
Some::Object.new.class # "Some::Object"
# And it doesn't pollute the global namespaced Object class:
Object.new.respond_to?(:foo) # false
Il cependant, pourrait être source de confusion ou ambiguë, si vous incluez certains dans une autre classe ou d'un module, à l'intérieur duquel l'objet se référer à une partie :: Object. Cependant, cela n'affectera rien en dehors de cette classe ou de ce module.
C'est la bonne réponse: le seul vrai inconvénient est que c'est déroutant. – Chuck
Il y a quelques pièges, mais cela fonctionne. Si vous faites cela, vous développez la classe Object qui est déjà dans Ruby.
class Object
def hello
end
end
Lorsque vous l'espace de noms, vous allez créer une nouvelle classe, cependant, dans cet espace de noms.
module Foo
class Object
# ...
end
end
Techniquement parlant, ce n'est pas un problème. Un inconvénient est que vous devez utiliser ::Object
lorsque vous voulez vous référer à la classe Object
intégrée. Vous ne faites pas ça très souvent, donc ce n'est pas un gros problème.
L'autre problème est que cela peut être très déroutant pour les autres développeurs, que vous devriez prendre en considération. Il est difficile de dire à partir de votre extrait ce que fait cette classe Some::Object
, mais peut-être Some::Record
, Some::Entity
fait plus de sens.
L'objet n'est pas un mot réservé dans Ruby - c'est une constante définie globalement qui fait référence à une classe particulière, comme Chaîne, Hash, etc. Les mots réservés dans Ruby sont des choses comme 'if',' return', etc. –