/ /初期化されていないインスタンス変数の設定-ruby、class、coding-style、instance-variables

初期化されていないインスタンス変数の設定 - ルビ、クラス、コーディングスタイル、インスタンス変数

初期化されていないクラスでインスタンス変数を使用し、他のメソッドを使用して設定するのはエレガントですか?それともそれを行うためのより良い方法がありますか?

class Klass
def initialize(a)
@a = a
end

def set_b(b)
@b = b
end
end

回答:

回答№1は1

他の言語とは異なり、インスタンス変数を初期化しない場合は常に nil (一方、他の特定の言語では、未定義のものを取得できます)。

他の方法の限り Klass 実際に値を持っているインスタンス変数に依存しないでください、これは大丈夫です。

ゲッターとセッターに関しては、 attr_accessor, attr_reader そして attr_writer (見る ドキュメント)。

class Klass
attr_accessor :b
# there"s also attr_reader and attr_writer

def initialize(a)
@a = a
end
end

k = Klass.new :foo
k.b = :bar

k.b
#=> :bar

k.a
#=> undefined method `a" for #<Klass:0x007f842a17c0e0 @a=:foo, @b=:bar> (NoMethodError)

回答№2の場合は0

あなたがそれをやっている方法は動作しますが、Rubyは定義しました attr_accessor, attr_reader そして attr_writer その目的のために。

attr_reader:「a」を読み取るメソッドを作成します

attr_writer:「a」を書き込むメソッドを作成します

attr_accessor:「a」を読み書きするメソッドを作成します

それを行う最良の方法は、 attr_accessor:a

class Klass
attr_accessor:a
def initialize(a)
@a = a
end
end

次に、あなたが行うことができます:

k = Klass.new "foo" #example
k.a = "bar"