在Ruby中,`self.i`和`@ i`之间有区别吗?

4 ruby oop syntax self

我以为可以尝试@i和self.i交替使用,但它给出了一个错误:

class Animal
    def initialize i
        @i = i
    end
    def get_i
        self.i
    end
end
a = Animal.new("Sparky")
puts a.get_i()
Run Code Online (Sandbox Code Playgroud)

输出:

source_file.rb:8:in `get_i':
undefined method `i' for #<Animal:0x000000010d5330 @i="Sparky"> 
    (NoMethodError)  
    from source_file.rb:12:in `<main>' 
Run Code Online (Sandbox Code Playgroud)

解释器处理代码的方式是否有所不同?

spi*_*ann 11

当然,betwenn self.i和之间有一个区别@i

  • @i将返回分配给变量的值@i
  • self.i将返回由名为的方法返回的值i

您的Animal类没有i定义方法,因此错误消息是正确的。

当您想self.i返回@i变量的值时,您需要创建一个i这样的方法

def i
  @i
end
Run Code Online (Sandbox Code Playgroud)

attr_reader像这样简单地使用宏:

class Animal
  attr_reader :i

  #...
end
Run Code Online (Sandbox Code Playgroud)