2009-05-15 4 views

Répondre

-2

Object est un mot réservé dans Ruby, donc vous ne devriez pas l'utiliser comme un nom pour votre classe.

+2

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. –

10

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.

+0

C'est la bonne réponse: le seul vrai inconvénient est que c'est déroutant. – Chuck

3

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.