OK. La différence entre les opérateurs =
et =>
est que la première est une affectation, la seconde représente une association dans un hachage (tableau associatif). Donc, { :key => 'val' }
dit "créer un tableau associatif, avec :key
étant la clé, et 'val'
étant la valeur". Si vous voulez ressembler à un Rubyist, nous appelons cela le "hashrocket". (Croyez-le ou non, ce n'est pas l'opérateur le plus étrange de Ruby, nous avons aussi le <=>
, ou "opérateur de vaisseau spatial".)
Vous pouvez être dérouté car il y a un peu de raccourci que vous pouvez utiliser dans méthodes, si le dernier paramètre est un hachage, vous pouvez omettre les accolades ({}
). l'appel render :partial => 'foo'
appelle donc fondamentalement la méthode render, en passant un hachage avec une seule paire clé/valeur. Pour cette raison, vous voyez souvent un hachage comme le dernier paramètre à trier les paramètres facultatifs d'un pauvre (vous voyez quelque chose de similaire fait en JavaScript aussi).
Dans Ruby, tout mot normal est une variable locale. Donc foo
à l'intérieur d'une méthode est une variable portée au niveau de la méthode. Le préfixage d'une variable avec @
signifie que la variable est étendue à l'instance. Donc @foo
dans une méthode est un niveau d'instance.
@@
signifie une variable de classe, ce qui signifie que les variables @@
sont dans la portée de la classe et toutes les instances.
:
signifie symbole. Un symbole dans Ruby est un type spécial de chaîne qui implique qu'il sera utilisé comme une clé. Si vous venez de C#/Java, ils sont similaires à la partie clé d'une énumération. Il existe également d'autres différences, mais chaque fois que vous allez traiter une chaîne comme une sorte de clé, vous utilisez un symbole à la place.
Les exemples 3 et 4 sont confus pour moi, je ne vois pas de différence dans les exemples 3 et 4. –
@Simon Exécutez l'exemple # 4 avec @x au lieu de @@ x et vous verrez la différence –