Ruby实例变量

时间:2012-10-30 18:20:00

标签: ruby

class Polygon
  attr_accessor :sides
  @sides = 10
end

当我尝试访问

puts Polygon.new.sides # => nil

我没有。如何进入双方? 这有什么不对?

4 个答案:

答案 0 :(得分:4)

由于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

答案 1 :(得分:1)

你需要:

def initialize
  @sides = 10
end

通过在类级别分配@sides,您创建了一个类实例变量而不是使用{{1创建的对象的实例变量 }}

在这种情况下,您有一个给定#new的属性,但如果它实际上是该类的属性(如 author copyright 或某物) )然后你可以通过Polygon,语法引用它,如果你在类方法中,是用@whatever创建的。

答案 2 :(得分:1)

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

def sides
end

def sides=
end

要获得此处提到的边的值,您需要在

中初始化它们
def initialize
  @sides = 10
end

答案 3 :(得分:1)

这个确切的问题(即使使用相同的示例代码)也会在railstips.org上得到解答。