ruby中的实例变量

Pha*_*ani 1 ruby

 class Sample
   attr_accessor :x,:y

   def initialize 
     @x = "x"
     y = "y"     
   end
 end     

 Sample.new.instance_variables  => [:@x] 

class Sample
  attr_accessor :x,:y

  def initialize 
     @x = "x"
     self.y = "y"     
  end
end  

Sample.new.instance_variables => [:@x, :@y] 
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道这里发生了什么.为什么y第二次是instance_variable?

Jim*_*lle 8

attr_accessor :y 定义大致相当于的方法

def y
  @y
end

def y=(val)
  @y = val
end
Run Code Online (Sandbox Code Playgroud)

因此,当您指定时self.y,由于attr_accessor宏而您正在分配实例变量