正常变量Vs Ruby中的实例变量,有什么区别?

Cur*_*ind 13 ruby variables

请考虑以下示例ruby类

class User
  def hello
    puts "hello"
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,用于初始化.有两种方法

正常变量

1.9.3p125  > tr = User.new
 => #<User:0x98778c4>
1.9.3p125  > tr.hello
 Hello world
 => nil`
Run Code Online (Sandbox Code Playgroud)

实例变量:

1.9.3p125 > @tr = User.new
 => #<User:0x9890f2c>
1.9.3p125 > @tr.hello
Hello world
 => nil
Run Code Online (Sandbox Code Playgroud)

现在,在这两种情况下它都是一样的.那么正常变量和实例变量有什么区别?

Cho*_*ett 32

普通变量仅在当前上下文中具有范围; 实例变量在类的一个实例中具有范围.在你的情况下,他们感到困惑,因为上下文是main,作为一个实例Object.

请考虑以下内容,这可能会使事情变得更加清晰

class User
  def set_name
    @name = "Bob"
    surname = "Cratchett"
  end

  def hi
    puts "Hello, " + @name
  end

  def hello
    puts "Hello, Mr " + surname
  end
end

irb(main):022:0> u = User.new
=> #<User:0x29cbfb0>
irb(main):023:0> u.set_name
irb(main):024:0> u.hi
Hello, Bob
=> nil
irb(main):025:0> u.hello
NameError: undefined local variable or method `surname' for #<User:0x29cbfb0 @name="Bob">
Run Code Online (Sandbox Code Playgroud)