@ Ruby on Rails中的变量

@titletitle之间有什么区别?因为它们都可以是变量名。另外,我如何决定我应该使用哪种变量?是否使用@ ?

205155 次浏览

@变量是实例变量,不为局部变量。

更多信息请访问http://ruby.about.com/od/variables/a/Instance-Variables.htm

区别在于变量的作用域。@version对类实例的所有方法都可用。

简单的回答是,如果你在控制器中,你需要使变量对视图可用,那么使用@variable

想要更长的答案,试试这个:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

title是一个局部变量。它们只存在于它的作用域内(当前块)

@title是一个实例变量,对类中的所有方法都可用。

你可以在这里阅读更多: http://strugglingwithruby.blogspot.dk/2010/03/variables.html < / p >

在Ruby on Rails中-将控制器中的变量声明为实例变量(@title)使它们对视图可用。

当你想让你的变量在视图中可用时,在你的控制器中使用@title

解释是:@title是一个实例变量,而title是一个局部变量。Rails使得控制器中的实例变量对视图可用,因为模板代码(erb、haml等)是在当前控制器实例的范围内执行的。

局部变量只能从它的初始化块内访问。此外,局部变量以小写字母(a-z)或下划线(_)开头。

实例变量是self的一个实例,以@开头。实例变量是你执行方法的变量,例如.send

例子:

@user = User.all

@user是实例变量

未初始化的实例变量的值为Nil

__abc0在ruby中被称为实例变量。这意味着您可以在类中的任何METHOD中访问这些变量。[类中的所有方法]

没有@符号的变量被称为局部变量,这意味着你只能在THAT declarations METHOD中访问这些局部变量。仅限于本地范围。

实例变量示例:

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

在上面的例子中,@cust_id@cust_name@cust_addr在类中的另一个方法中访问。但是同样的事情不能用局部变量来实现。

一个关于什么是变量作用域?的教程很好地展示了一些细节,在这里附上相关的内容。


+------------------+----------------------+
| Name Begins With |    Variable Scope    |
+------------------+----------------------+
| $                | A global variable    |
| @                | An instance variable |
| [a-z] or _       | A local variable     |
| [A-Z]            | A constant           |
| @@               | A class variable     |
+------------------+----------------------+