2009-10-05 6 views
3

Je veux savoir le sens réel et comment l'utiliser exactement.qu'est-ce que "?" en ruby ​​signifie?

Une autre question porte sur assert j'ai vu

assert product.valid? product.errors.full_messages et

assert product.valid? 

Mais je ne peux pas trouver la syntaxe pour les faire valoir ce que fait le second argument pour assert (product.errors.full_messages) moyens ou c'est arg pour?

Merci

+0

Je viens de recevoir une réponse à propos de assert, dans chaque méthode assert dernier argument (facultatif) message spécifié à montrer quand il affirme false – sarunw

Répondre

11

Ruby utilise des conventions de dénomination spécifiques pour les méthodes. Il vous permet d'identifier rapidement les effets secondaires qu'ils peuvent avoir, ou le type de retour ..

Ces conventions utilisent des marqueurs spéciaux tels que « ! » et « ? » à la fin des noms de méthode. Ceci est rare car la plupart des langages de programmation ont tendance à interdire de tels caractères dans les identifiants, mais néanmoins, ils font vraiment partie du nom de la méthode. (Et ne doit pas être confondu avec les opérateurs)

  • après fixation « ? » signifie que la méthode renvoie un booléen. C'est un moyen pratique de remplacer le préfixe "is". (Cette convention a aussi tendance à exister dans les dialectes Lisp)
  • Correction de la publication "!" signifie que la méthode modifiera l'instance et n'agira donc pas/retournera une copie.

Notez que ce ne sont que des conventions. En aucun cas, vous devez le suivre, mais est considéré comme une bonne pratique.

+2

Juste pour ajouter à ce poste dans ce cas, le «? et '!' font en fait partie du nom de la méthode et non des opérateurs. – rslite

+2

Juste pour ajouter ça? et ! sont juste une convention et non une exigence. –

+4

Sincèrement, le but de! marque est de marquer une méthode comme spéciale. Cela ne signifie pas nécessairement que ce sera destructeur ou dangereux, mais cela signifie qu'il faudra plus d'attention que son alternative. ActiveRecord créer! est un exemple sur l'utilisation non destructive. – khelll

1

Il est juste convention pour le mettre sur une méthode qui retourne un booléen. Afaik Plutôt que de faire chaque chose est quelque chose.

3

C'est purement conventionnel, il n'a aucune signification formelle. Il n'est pas inhabituel pour les gens d'être déroutés par cela, puisque beaucoup de langues (la plupart?) N'autorisent pas les caractères tels que? et ! dans les identifiants.