339

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

4

7 回答 7

501

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

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

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

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

于 2013-01-14T13:40:30.227 回答
37

@title当您希望变量在视图中可用时,请在控制器中使用。

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

于 2013-01-14T13:40:48.300 回答
30

关于什么是变量作用域的教程?一些细节表现得很好,这里只附上相关的。


+------------------+----------------------+
| Name Begins With |    Variable Scope    |
+------------------+----------------------+
| $                | A global variable    |
| @                | An instance variable |
| [a-z] or _       | A local variable     |
| [A-Z]            | A constant           |
| @@               | A class variable     |
+------------------+----------------------+
于 2019-03-27T08:01:38.637 回答
26

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

简短的回答是,如果您在控制器中并且需要使变量对视图可用,则使用@variable.

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

于 2013-01-14T13:33:59.730 回答
15

@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是在类中的另一个方法中访问的。但是使用局部变量将无法访问相同的内容。

于 2014-07-04T13:44:41.650 回答
4

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

并且实例变量是一个实例,self并且以一个开头,@而且一个实例变量属于对象本身。实例变量是您对 ie.send等执行方法的变量

例子:

@user = User.all

@user实例变量

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

于 2013-12-09T09:33:06.357 回答
1

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

在http://ruby.about.com/od/variables/a/Instance-Variables.htm阅读更多信息

于 2013-01-14T13:33:09.620 回答