实例变量的实际用途是什么?

时间:2018-08-07 06:53:43

标签: ruby-on-rails

我对ruby rails不熟悉,我正努力了解实例变量的用途。

将变量变成实例变量有什么意义?

基本上我为什么要这样做:

class User
   def initialize(var1)
     @name = var1
   end
end

对此:

class User
   def initialize(var1)
     name = var1
   end
end

在什么类型的情况下,我只想在常规变量上使用实例变量?

3 个答案:

答案 0 :(得分:0)

实际用途是,如果您需要一个变量来在函数调用之间持久存在,请将其设置为实例变量。

定义实例变量后,可以在另一个函数上调用此值,您将获得该值。

通常,实例变量是局部变量,并且持久化在对象的实例内部,而局部变量只是局部变量,并且持久化在函数/对象/块作用域之内。

在您的示例中,如果您的用户类上还有其他方法,则可以在该其他方法上使用@name的值,但不能在initialize方法之外使用var1。

class User
   def initialize(var1)
     @name = var1
   end

   def greetings
     "hello #{@name}"
   end    
end

答案 1 :(得分:-1)

class People
  def age
    @age
  end

  def age= age
    @age = age
  end
end

def show people
  age = people.age || '22'
  p "Hello, my age is #{age}"
end

people = People.new
show people
=> 'Hello, my age is 22'
age
=> NameError: undefined local variable or method 'age' for main:Object
user.age = 21
greet people
=> 'Hello, my age is 21'
@age
=> nil

请注意,尽管这两种变量类型都是特定上下文的局部变量。 @age是在people实例中定义的,因此,当您调用people.age时,您将在其中定义了@age的age实例中调用age函数。年龄仅在show函数中定义,因此,当您调用p“你好,我的年龄是#{age}”时,由于处于定义范围内,因此可以获取年龄值。

答案 2 :(得分:-2)

因为实例变量可以被视图代码访问,包括在表单内以及将数据传递到路径。对于他们来说,这可能是最常见的实际用例。在您的示例中,我可以执行以下操作:

<p>User: <%= "#{@name}" %></p>

而且,您不会在呈现的H.T.M.L的相应段落中看到“ @name”,而是看到了该实例变量的值-反之:

<p>User: <%= "#{name}" %></p>

...据此,由于未定义“名称”,可能会导致ActionView错误。