【发布时间】:2012-12-28 11:11:18
【问题描述】:
@title 和 title 有什么区别?因为它们都可以是变量名。另外,我如何决定应该使用哪种变量?是否使用@?
【问题讨论】:
-
我想说这个教程很好地解释了所有这些:techotopia.com/index.php/…
标签: ruby-on-rails ruby variables
@title 和 title 有什么区别?因为它们都可以是变量名。另外,我如何决定应该使用哪种变量?是否使用@?
【问题讨论】:
标签: ruby-on-rails ruby variables
title 是一个局部变量。它们只存在于其范围内(当前块)
@title 是一个实例变量 - 可用于类中的所有方法。
您可以在此处阅读更多内容: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
在 Ruby on Rails 中 - 将控制器中的变量声明为实例变量 (@title) 使它们可用于您的视图。
【讨论】:
当您希望变量在视图中可用时,请在控制器中使用 @title。
解释是@title是一个实例变量,而title是一个局部变量。 Rails 使来自控制器的实例变量对视图可用,因为模板代码(erb、haml 等)在当前控制器实例的范围内执行。
【讨论】:
一个关于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 |
+------------------+----------------------+
【讨论】:
区别在于变量的范围。 @version 可用于类实例的所有方法。
简短的回答,如果您在控制器中并且需要使变量可用于视图,请使用@variable。
要获得更长的答案,试试这个:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
【讨论】:
@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
在上面的示例中,@cust_id、@cust_name、@cust_addr 在类中的另一个方法中被访问。但是使用局部变量将无法访问相同的内容。
【讨论】:
局部变量只能从它的初始化块中访问。此外,局部变量以小写字母 (a-z) 或下划线 (_) 开头。
实例变量是self 的一个实例,并以@ 开头。实例变量也属于对象本身。实例变量是您执行方法的变量,例如 .send 等
示例:
@user = User.all
@user 是实例变量
并且未初始化的实例变量的值为Nil
【讨论】:
@title和title之间的区别?
@title还是title
@变量是实例变量,没有是局部变量。
阅读更多http://ruby.about.com/od/variables/a/Instance-Variables.htm
【讨论】: