OK umformuliert werden.
Der Unterschied zwischen den Operatoren =
und =>
ist, dass die erste Zuweisung ist, die zweite eine Assoziation in einem Hash (assoziative Array) darstellt. So { :key => 'val' }
sagt „erstellen Sie ein assoziatives Array, mit :key
der Schlüssel zu sein, und 'val'
wobei der Wert“. Wenn Sie wie ein Rubyist klingen wollen, nennen wir das "hashrocket". (Ob Sie es glauben oder nicht, das ist nicht der seltsamste Operator in Ruby; wir haben auch die <=>
, oder "Raumschiff-Operator".)
Sie können verwirrt sein, weil es ein bisschen eine Abkürzung gibt, in der Sie verwenden können Methoden, wenn der letzte Parameter ein Hash ist, können Sie die Squiggly-Klammern ({}
) weglassen. Das Aufrufen von render :partial => 'foo'
ruft im Grunde die Rendermethode auf und übergibt einen Hash mit einem einzelnen Schlüssel/Wert-Paar. Aus diesem Grund sehen Sie oft einen Hash als letzten Parameter, der die optionalen Parameter eines armen Mannes enthält (Sie sehen etwas Ähnliches auch in JavaScript).
In Ruby, jedes normales Wort ist eine lokale Variable. So ist foo
innerhalb einer Methode eine Variable, die auf die Methodenebene beschränkt ist. Das Vorfixieren einer Variablen mit @
bedeutet, dass die Variable auf die Instanz beschränkt ist. So ist @foo
in einer Methode eine Instanzenebene.
@@
bedeutet eine Klassenvariable, was bedeutet, dass @@
Variablen im Bereich der Klasse und alle Instanzen sind.
:
bedeutet Symbol. Ein Symbol in Ruby ist eine spezielle Art von String, die impliziert, dass es als Schlüssel verwendet wird. Wenn Sie aus C#/Java kommen, sind sie ähnlich dem Schlüsselteil einer Enumeration. Es gibt auch einige andere Unterschiede, aber grundsätzlich, wenn Sie eine Zeichenfolge als eine Art von Schlüssel behandeln, verwenden Sie stattdessen ein Symbol.
Beispiel 3 und 4 sind verwirrend für mich, ich kann keinen Unterschied in Beispiel 3 und 4 sehen. –
@Simon Führen Sie das Beispiel # 4 mit @x statt @@ x und Sie werden den Unterschied sehen –