在这个微小的类中执行@sides=10
语句时?
该声明如何与initialize
方法相关?Ruby字段初始化
class Poligon
attr_accessor :sides
@sides=10
end
我主要用于Java,它通常对属性进行内联初始化。我现在试图了解Ruby的完整初始化过程,但我无法找到它。
在这个微小的类中执行@sides=10
语句时?
该声明如何与initialize
方法相关?Ruby字段初始化
class Poligon
attr_accessor :sides
@sides=10
end
我主要用于Java,它通常对属性进行内联初始化。我现在试图了解Ruby的完整初始化过程,但我无法找到它。
简短回答:
政治家@sides = 0
(实际上)是执行时class
表达式在评估中。
与initialize
方法完全没有关系。
如你把它写,所述@sides
变量是一个类实例变量,即Poligon
对象(记住,在Ruby类是Class
类的对象)的实例变量。您必须在方法定义内初始化实例变量(可能在initialize
方法中)。考虑下面这个例子:
class Poligon
@class_sides = 'class instance variable'
def initialize
@instance_sides = 'instance variable'
end
end
Poligon.instance_variables
# => [:@class_sides]
Poligon.instance_variable_get(:@class_sides)
# => "class instance variable"
Poligon.new.instance_variables
# => [:@instance_sides]
Poligon.new.instance_variable_get(:@instance_sides)
# => "instance variable"
更多有关类实例变量以及它们如何与类变量您可以阅读this article by Martin Fowler。
惊人的解释,谢谢 – mottalrd
您需要将此@sides=10
放入一个方法中,以及您当前的类定义。
class Poligon
attr_accessor :sides
def line
@sides=10
end
end
p = Poligon.new
p.line
puts p.sides
# >> 10
没错。否则,你设置'Poligon'对象的实例变量。 –
initialize方法是类的构造函数。如果你愿意,你可以在构造器初始化实例变量:
class Poligon
attr_accessor :sides
def initialize(num_sides)
@sides = num_sides
end
end
但由于@sides
被声明为attr_accessor
,您可以设置/直接得到它:
p = Poligon.new
p.sides = 10
在此博客中找到有关此主题的信息:http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/ – hirolau