Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby字段初始化_Ruby_Attributes_Initialization - Fatal编程技术网

Ruby字段初始化

Ruby字段初始化,ruby,attributes,initialization,Ruby,Attributes,Initialization,在这个小类中,当@sides=10语句被执行时? 此语句与initialize方法的关系如何 class Poligon attr_accessor :sides @sides=10 end 我主要习惯于Java,在Java中,属性的内联初始化是很常见的。我现在正试图理解Ruby的完整初始化过程,但我找不到它。您需要将@sides=10放入一个方法中,并使用当前的类定义 class Poligon attr_accessor :sides def line

在这个小类中,当@sides=10语句被执行时? 此语句与initialize方法的关系如何

class Poligon
    attr_accessor :sides
    @sides=10
end
我主要习惯于Java,在Java中,属性的内联初始化是很常见的。我现在正试图理解Ruby的完整初始化过程,但我找不到它。

您需要将@sides=10放入一个方法中,并使用当前的类定义

class Poligon
    attr_accessor :sides
    def line
     @sides=10
    end
end

p = Poligon.new
p.line
puts p.sides
# >> 10

initialize方法是类的构造函数。如果需要,可以在构造函数中初始化实例变量:

但由于@sides被声明为attr_访问器,您可以直接设置/获取它:

p = Poligon.new
p.sides = 10
简短答覆:

statemen@sides=0,在计算中的类表达式时实际执行

它与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"

有关类实例变量以及它们与类变量的关系的更多信息,请阅读。

在本博客中找到了有关该主题的信息:没错。否则,将设置Poligon对象的实例变量。
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"