0

@sides=10ステートメントが実行されるときのこの小さなクラスでは?
このステートメントはinitializeメソッドにどのように関連していますか?

class Poligon
    attr_accessor :sides
    @sides=10
end

私は主に、属性のインライン初期化が一般的な Java に慣れています。Ruby の完全な初期化手順を理解しようとしていますが、見つけることができませんでした。

4

3 に答える 3

3

初期化メソッドは、クラスのコンストラクターです。必要に応じて、コンストラクターでインスタンス変数を初期化できます。

class Poligon
    attr_accessor :sides

    def initialize(num_sides)
      @sides = num_sides
    end
end

しかし、@sidesは として宣言されているattr_accessorため、直接設定/取得できます。

p = Poligon.new
p.sides = 10
于 2013-09-26T11:02:47.890 に答える
3

短い答え:

  • ステートメン@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"

クラス インスタンス変数の詳細とクラス変数との関係については、Martin Fowler によるこの記事を参照してください。

于 2013-09-26T12:02:31.643 に答える