class Polygon
attr_accessor :sides
@sides = 10
end
当我尝试访问
puts Polygon.new.sides # => nil
我得到零。如何访问边?这里有什么问题?
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
你需要:
def initialize
@sides = 10
end
通过@sides
在类级别赋值,您创建了一个类实例变量,而不是您使用创建的对象的实例变量#new
。
在这种情况下,您有一个给定的属性,Polygon,
但如果它实际上是类的属性(如作者或版权或其他东西),那么如果您在使用创建的类方法@whatever
中,则可以通过语法引用它。def self.something ... end
attr_accessor,简而言之定义了两种方法。
def sides
end
def sides=
end
要获得此处提到的边的值,您需要将它们初始化为
def initialize
@sides = 10
end
这个确切的问题(甚至使用您拥有的相同示例代码)在railstips.org上得到了回答。