variáveis em Ruby sobre trilhos
@title
e title
? Uma vez que ambos podem ser nomes variáveis. Além disso, como eu decido que tipo de variável eu devo usar? Com @
ou não?
6 answers
title
é uma variável local. Apenas existem no seu âmbito (bloco actual)
@title
é uma variável de instância-e está disponível para todos os métodos dentro da classe.
Em Ruby on Rails-declarando as suas variáveis no seu controlador como variáveis de instância (@title
) torna-as disponíveis para a sua vista.
Use @title
nos seus controladores quando quiser que a sua variável esteja disponível nas suas vistas.
A explicação é que @title
é uma variável de instância e title
é uma variável local e rails faz variáveis de instância de controladores disponíveis para vistas. Isso acontece porque o código do modelo (erb, haml, etc) é executado dentro do escopo da instância do controlador atual.
A diferença está no âmbito da variável. A versão @está disponível para todos os métodos da instância de classe.
A resposta curta, Se você está no controlador e você precisa tornar a variável disponível para a vista, então use {[[0]}.
Para uma resposta muito mais longa, tente isto: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html@variable
s são chamadas variáveis de instância em ruby. O que significa que você pode acessar essas variáveis em qualquer método dentro da classe. [Em todos os métodos da classe]
As variáveis sem o símbolo @
são chamadas variáveis locais, o que significa que você pode aceder a estas variáveis locais apenas dentro desse método declarado. Limitado ao âmbito local.
class Customer
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details
puts "Customer id #{@cust_id}"
puts "Customer name #{@cust_name}"
puts "Customer address #{@cust_addr}"
end
end
No exemplo acima@cust_id
, @cust_name
, @cust_addr
são acessados em outro método dentro do classe. Mas a mesma coisa não seria acessível com variáveis locais.
Uma variável local só é acessível a partir do interior do bloco da sua inicialização. Também uma variável local começa com uma letra minúscula (A-z) ou sublinhado (_).
And instance variable is an instance of self
and begins with a @
Also an instance variable belongs to the object itself. As variáveis de instância são aquelas em que você executa métodos por exemplo .send
etc
Exemplo:
@user = User.all
O @user
é a variável instância
E instância não inicializada as variáveis têm um valor de Nil
@ variáveis são variáveis de instância, sem variáveis locais.
Leia mais em http://ruby.about.com/od/variables/a/Instance-Variables.htm