Jaka jest różnica między @title
i title
? Ponieważ oba mogą być nazwami zmiennych. Ponadto, jak zdecydować, jakiego rodzaju zmiennej powinienem użyć? Z @
czy nie?
ruby-on-rails
ruby
variables
OneZero
źródło
źródło
Odpowiedzi:
title
jest zmienną lokalną. Istnieją tylko w jego zakresie (bieżący blok)@title
jest zmienną instancji - i jest dostępna dla wszystkich metod w klasie.Możesz przeczytać więcej tutaj: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
W Ruby on Rails - zadeklarowanie zmiennych w kontrolerze jako zmiennych instancji (
@title
) powoduje, że są one dostępne dla twojego widoku.źródło
Użyj
@title
w kontrolerach, jeśli chcesz, aby zmienna była dostępna w twoich widokach.Wyjaśnienie jest takie, że
@title
jest to zmienna instancji i zmiennatitle
lokalna, a szyny udostępniają zmienne instancji z kontrolerów do widoków. Dzieje się tak, ponieważ kod szablonu (erb, haml itp.) Jest wykonywany w ramach bieżącej instancji kontrolera.źródło
Różnica leży w zakresie zmiennej. Wersja @ jest dostępna dla wszystkich metod instancji klasy.
Krótka odpowiedź, jeśli jesteś w kontrolerze i musisz udostępnić zmienną do widoku, a następnie użyj
@variable
.Aby uzyskać znacznie dłuższą odpowiedź, spróbuj tego: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
źródło
@variable
s są nazywane zmiennymi instancji w Rubim. Co oznacza, że możesz uzyskać dostęp do tych zmiennych w DOWOLNEJ METODIE wewnątrz klasy. [We wszystkich metodach w klasie]Zmienne bez
@
symbolu są nazywane zmiennymi lokalnymi, co oznacza, że możesz uzyskać dostęp do tych zmiennych lokalnych tylko w TYM ZADEKLAROWANEJ METODIE. Ograniczony do zakresu lokalnego.Przykład zmiennych instancji:
W powyższym przykładzie
@cust_id
,@cust_name
,@cust_addr
są dostępne w inny sposób w ramach klasy. Ale to samo nie byłoby dostępne w przypadku zmiennych lokalnych.źródło
Samouczek dotyczący tego, czym jest zmienny zakres? całkiem dobrze prezentuje niektóre szczegóły, po prostu załącz pokrewne tutaj.
źródło
Zmienna lokalna jest dostępna tylko z poziomu bloku jej inicjalizacji. Również zmienna lokalna zaczyna się od małej litery (az) lub podkreślenia (_).
Zmienna instancji jest instancją
self
i zaczyna się@
od Zmienna instancji należy również do samego obiektu. Zmienne instancji są tymi, które wykonujesz metodami np..send
Itpprzykład:
Jest
@user
to zmienna instancjiZmienne niezainicjowanej instancji mają wartość
Nil
źródło
@title
&title
?@title
czytitle
Zmienne @ są zmiennymi instancji, bez zmiennych lokalnych.
Czytaj więcej na http://ruby.about.com/od/variables/a/Instance-Variables.htm
źródło