Ruby实例变量

  • 本文关键字:变量 实例 Ruby ruby
  • 更新时间 :
  • 英文 :

class Polygon
  attr_accessor :sides
  @sides = 10
end

当我尝试访问

puts Polygon.new.sides # => nil

我得到了零。如何访问侧面?这里怎么了?

由于Ruby类定义只是可执行的代码,当您在类定义的上下文中说@sides = 10时,您在Polygon上定义了这一点(不是Polygon的实例):

class Polygon
  attr_accessor :sides
  @sides = 10
end
Polygon.instance_variables
# => [:@sides]

您可能想在polygon的实例上设置侧面数,从初始化器:

class Polygon
  attr_accessor :sides
  def initialize(sides)
    @sides = sides
  end
end 
Polygon.new(10).sides
# => 10

这个确切的问题(甚至使用您拥有的相同示例代码),在railstips.org上回答。

attr_accessor,简而言之定义了两种方法。

def sides
end
def sides=
end

要获得此处提到的侧面的价值,您需要在

中启动它们
def initialize
  @sides = 10
end

您需要:

def initialize
  @sides = 10
end

通过在类级别分配给@sides,您创建了一个 class实例变量,而不是用#new实例变量

在这种情况下,您具有给定Polygon,的属性,但是如果它实际上是类的属性(例如 wurs em>或版权所有之类的东西),那么您可以通过 @whatever语法引用它,如果您是在类方法中,def self.something ... end

创建

最新更新