ここで属性@color
はどこに定義されていますか?おそらくコンストラクタの割り当て?この場合、型に複数のコンストラクタがあり、そのうちの1つが@color
に値を割り当てていない場合はどうなりますか?Ruby - ここでの属性定義はどこですか?
class Baz
def initialize(color)
@color = color
end
def color
@color
end
def color=(value)
@color = value
end
end
注:ルビでは、クラスに複数の初期化子を定義することはできません。初期値はデフォルト値で定義できます。 'def initialize(color = 'FFFFFF')'です。パラメータを指定せずに 'Baz.new'を呼び出すと、デフォルト値が' @color'に割り当てられます –
私はあなたの質問に答えを投稿しましたが、別のことに注意すると便利です。クラス内部を公開することなく、インスタンス変数への堅牢なインタフェースを作成できます。これについての詳細はこちらを参照してください。http://www.rubyist.net/~slagell/ruby/accessors.html –
これらの属性アクセサを使用することの利点は、後で追加する必要がある場合にメソッドを手動で定義できることです簡単なゲッター/セッターよりも複雑な機能また、入力を省くこともできます。あなたのコード例では、 'color'と' color = 'メソッドを定義する代わりに' attr_accessor:color'と書いて、setter/getterメソッドを自動的に取得することができます。 –