1
class Polygon
  attr_accessor :sides
  @sides = 10
end

アクセスしようとすると

puts Polygon.new.sides # => nil

私はゼロになります。サイドにアクセスする方法は?ここで何が問題になっていますか?

4

4 に答える 4

4

rubyクラス定義は単なる実行可能コードであるため、クラス定義のコンテキストで言うと、それを(Polygonのインスタンスではなく)で@sides = 10定義していることになります。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
于 2012-10-30T18:24:52.173 に答える
1

必要なもの:

def initialize
  @sides = 10
end

@sidesクラスレベルでに割り当てることにより、で作成したオブジェクトのインスタンス変数ではなく、クラスインスタンス変数を作成しました。#new

この場合、指定された属性がありますがPolygon,、それが実際にクラスの属性(作成著作権など)である場合は、で作成されたクラスメソッドを使用している場合@whateverは、構文を介してそれを参照できます。def self.something ... end

于 2012-10-30T18:24:47.997 に答える
1

要するに、attr_accessorは2つのメソッドを定義します。

def sides
end

def sides=
end

ここで言及した辺の値を取得するには、それらを初期化する必要があります

def initialize
  @sides = 10
end
于 2012-10-30T18:25:48.150 に答える
1

この正確な質問(あなたが持っているのと同じサンプルコードを使用している場合でも)は、railstips.orgで回答されています。

于 2012-10-30T18:25:57.443 に答える