Je suis en cours d'exécution Ruby 1.9.
Ceci est une syntaxe valide: p> mais cela me donne une erreur: p> pourquoi ?! p> p>
3 Réponses :
Ruby interprète la fin de la ligne comme fin de déclaration. Les opérateurs indiquent la poursuite d'une déclaration.
Vous pouvez utiliser BacksLash \ code> pour indiquer la suite ainsi que les suivants fonctionnent donc P>
items = (data['DELETE'] || data['delete'] \
|| data['GET'] || data['get'] || data['POST'] || data['post'])
Ce que je peux dire, c'est "C'est comme ça que ça marche". em> L'analyseur Ruby fait un travail incroyable, en général, de déterminer lorsqu'une expression doit continuer sur une autre ligne. À peu près toutes les autres langues du monde parle complètement sur ce problème et nécessite un caractère réel de continuer à suivre la ligne suivante ou de mettre fin à la déclaration. P> Comme vous le savez, Ruby est spécial dans ce domaine, presque toujours, Il ne le fait que le chiffre. P> Dans ce cas, cependant, il y a un conflit. L'analyseur sait que votre expression n'est pas terminée, car il cherche toujours le Par exemple, vous pouvez écrire quelque chose comme Ceci: p> ... mais en utilisant le Terminator SoftWline Soft au lieu de (BTW, la valeur de cette expression est la valeur de la dernière expression dans la séquence.) p> ruby ne peut pas analyser votre déclaration et le dessus Sans une meilleure ascension telle qu'un opérateur binaire qui nécessite clairement une autre ligne. p> p> ) code>, mais cela pourrait être une expression composée. P>
; code> ... Cette syntaxe ci-dessous fonctionne réellement: p>
Je ne sais pas si "un travail étonnant" est correct (je dirais que c'est impair i> comme l'expression peut continuer i> être poursuivi par un opérateur sur une ligne suivante), Mais I> C'est ainsi que la langue rubis (verrues et toutes) est définie de +1. (JavaScript gère cela différemment - et peut-être plus "attendu" - avec quelques productions restreintes pour ASI.)
En fait: Scala et Python - également qui ne nécessitent pas de semi-couches - aussi i> manipulez cela différemment, et peut-être de «attendu», comparé au rubis. Ils ne soutiennent pas ce dernier formulaire argumenté pour la réponse (entre parenthèses et aucun séparateur de déclaration), ce qui est une construction impair-ish).
Puisque Ruby est orienté ligne, des déclarations qui se terminent par un opérateur sont interprétées comme incomplètes. Ajout d'une barre oblique inverse une fois que l'opérateur autorisera l'instruction multiligne à être interprétée correctement. (Source: http://phrogz.net/programmingRuby/language.html ) P>