Qual é a diferença entre @title
e title
? Como os dois podem ser nomes de variáveis. Além disso, como decido que tipo de variável devo usar? Com @
ou não?
ruby-on-rails
ruby
variables
OneZero
fonte
fonte
Respostas:
title
é uma variável local. Eles só existem dentro do seu escopo (bloco atual)@title
é uma variável de instância - e está disponível para todos os métodos dentro da classeVocê pode ler mais aqui: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
No Ruby on Rails - declarar suas variáveis no seu controlador como variáveis de instância (
@title
) as torna disponíveis para sua visualização.fonte
Use
@title
em seus controladores quando quiser que sua variável esteja disponível em suas visualizações.A explicação é que
@title
é uma variável de instância etitle
é uma variável local e os trilhos disponibilizam variáveis de instância de controladores para visualizações. Isso acontece porque o código do modelo (erb, haml, etc) é executado dentro do escopo da instância atual do controlador.fonte
A diferença está no escopo da variável. A versão @ está disponível para todos os métodos da instância da classe.
A resposta curta, se você estiver no controlador e precisar disponibilizar a variável para a visualização, use
@variable
.Para uma resposta muito mais longa, tente o seguinte: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
fonte
@variable
s são chamados 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]Variáveis sem o
@
símbolo são chamadas de variáveis locais, o que significa que você pode acessar essas variáveis locais somente dentro DO MÉTODO DECLARADO. Limitado ao escopo local.Exemplo de variáveis de instância:
No exemplo acima
@cust_id
,@cust_name
,@cust_addr
são acedidas num outro método dentro da classe. Mas a mesma coisa não seria acessível com variáveis locais.fonte
Um tutorial sobre O que é escopo variável? apresenta alguns detalhes muito bem, basta incluir os relacionados aqui.
fonte
Uma variável local é acessível apenas dentro do bloco de inicialização. Além disso, uma variável local começa com uma letra minúscula (az) ou sublinhado (_).
E a variável de instância é uma instância
self
e começa com uma@
variável Também uma instância pertence ao próprio objeto. Variáveis de instância são aquelas em que você executa métodos, por exemplo,.send
etc.exemplo:
A
@user
é a variável de instânciaE variáveis de instância não inicializadas têm um valor de
Nil
fonte
@title
&title
?@title
outitle
@ variáveis são variáveis de instância, sem são variáveis locais.
Leia mais em http://ruby.about.com/od/variables/a/Instance-Variables.htm
fonte