Ruby on Rails中的@变量

One*_*ero 269 ruby variables ruby-on-rails

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

Pet*_*sen 394

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

@title 是一个实例变量 - 并且可用于类中的所有方法.

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

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

  • 感谢您的回答,还有后续问题...在我正在研究的一个类中,成员变量的初始构造类似于@options = {...}。但是,在此之后,类中的方法将访问该变量,并使用该变量进行函数调用,就像该变量是本地变量一样(即“ options.merge()”)。这只是不好的形式吗?还有其他语法语法吗?(例如,使变量成为静音dup,或将其设为“ const”,使其无法被修改等)?我从C / C ++和Java的角度出发,真正模糊和可选的语法使我发疯! (3认同)

sub*_*ing 30

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

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

  • 谢谢你!这是解释为什么在控制器类中定义的 @variables 可以被视图中的代码选取的唯一答案。 (2认同)

GSP*_*GSP 25

不同之处在于变量的范围.@version可用于类实例的所有方法.

简短的回答,如果你在控制器中,你需要使变量可用于视图然后使用@variable.

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


Pra*_*thi 13

@variables在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
Run Code Online (Sandbox Code Playgroud)

在上述例子中@cust_id,@cust_name,@cust_addr在类内的另一方法来访问.但是局部变量无法访问同样的事情.


Hea*_*ren 7

关于什么是可变作用域的教程很好地呈现了一些细节,只需在此处附上相关内容即可。


+------------------+----------------------+
| Name Begins With |    Variable Scope    |
+------------------+----------------------+
| $                | A global variable    |
| @                | An instance variable |
| [a-z] or _       | A local variable     |
| [A-Z]            | A constant           |
| @@               | A class variable     |
+------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)