Ruby on Rails中的@变量

时间:2013-01-14 13:30:00

标签: ruby-on-rails ruby variables

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

7 个答案:

答案 0 :(得分:366)

title是一个局部变量。它们仅存在于其范围内(当前块)

@title是一个实例变量 - 可供类中的所有方法使用。

您可以在这里阅读更多内容: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

在Ruby on Rails中 - 在控制器中将变量声明为实例变量(@title),使它们可供您查看。

答案 1 :(得分:27)

如果希望变量在视图中可用,请在控制器中使用@title

解释是@title是一个实例变量,title是一个局部变量,rails使控制器的实例变量可用于视图。发生这种情况是因为模板代码(erb,haml等)是在当前控制器实例的范围内执行的。

答案 2 :(得分:25)

差异在于变量的范围。 @version可用于类实例的所有方法。

简短的回答,如果你在控制器中并且你需要使变量可用于视图,那么使用@variable

要获得更长的答案,请尝试:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

答案 3 :(得分:13)

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

没有@符号的变量称为局部变量,这意味着您只能在THAT DECLARED 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在类中的另一个方法中被访问。但是局部变量无法访问同样的事情。

答案 4 :(得分:4)

只能从其初始化块中访问局部变量。局部变量也以小写字母(a-z)或下划线(_)开头。

实例变量是self的实例,以@开头。实例变量也属于对象本身。实例变量是您在.send

上执行方法的变量

示例:

@user = User.all

@user是实例变量

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

答案 5 :(得分:2)

有关What is Variable Scope?的教程很好地介绍了一些细节,只需在此处附上相关内容即可。


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

答案 6 :(得分:1)

@ variables是实例变量,没有局部变量。

http://ruby.about.com/od/variables/a/Instance-Variables.htm

了解详情