Outre les erreurs de syntaxe évidente (par exemple in
est un mot Reseved et null
est orthographié nil
en Ruby), le code que vous montriez devrait fonctionner très bien comme il est, et en effet il le fait lorsque je copie & le coller dans mon installation Ruby. Cela suppose, bien entendu, que les classes Foo::A
, Foo::B
et Foo::C
existent réellement. Si ce n'est pas le cas, le code ne peut évidemment pas fonctionner.
Il est cependant tout à fait non Rubyish et viole à peu près toutes les conventions de codage dans le livre:
- indentation est 2 espaces
- noms de méthode sont
snake_case
, pas camelCase
- la vérification explicitement égalité à
nil
est un non-non, appelant simplement #nil?
est beaucoup préféré
try_classes
n'est pas exactement un nom de méthode révélatrice d'intention
- et WTF fait
in
signifie?
- Rubyistes beaucoup préfèrent les méthodes d'ordre supérieur sur explicite boucle
Voici une version plus Rubyish du code que vous avez écrit:
def can_create_object?(*args)
[Foo::A, Foo::B, Foo::C].none? do |klass|
klass.new(*args).nil?
end
end
Cependant, notez que je suis assez convaincu que l'idée est fondamentalement imparfait.
Comment voulez-vous que la fonction se comporte? remplir le tableau et générer des classes fonctionne bien. Voulez-vous qu'il retourne le premier cours où le nouveau a réussi? –
Je viens de réaliser ce que vous voulez dire. Oui, à des fins d'apprentissage je veux juste qu'il retourne true quand il crée une instance valide de A B ou C. – willoller
Qu'est-ce que 'tryClasses (in)' et avec qui 'end' est-il à la fin? –