Rubyでは、の2つのの4つのケースで違いがありますか?もしそうなら、どちらがより良い方法ですか?インスタンスを返すためのRubyのベストプラクティスは、定義されていない可能性があります
class OptionOne
def initialize(arr)
@arr = arr
end
def arr
@arr || []
end
end
class OptionTwo
def initialize(arr)
@arr = arr
end
def arr
(defined? @arr) ? @arr : []
end
end
第三の選択肢、イリヤが言及したのRubyスタイルガイドにしたがって:
class OptionThree
def initialize(arr)
@arr = arr
end
def arr
@arr ||= []
end
end
そしてキース・ベネットからの回答から4番目のオプション:
class OptionFour
attr_accessor :arr
def initialize(arr = [])
@arr = arr
end
end
'@ arr'行で何をしようとしていますか? –
このコードでは、@arrを値で初期化する方法はありませんので、@arrは常にnil(定義されていません)になります。また、OptionOne#arrでは、 '@ arr'(「@」に注意してください)と言う必要があります。それ以外の場合、スタックオーバーフローが発生するまで関数は自身を呼び出します。 –
変数が初期化されている空の配列の場合は、コンストラクタで初期化をしないでください。遅延初期化(遅延が必要になるまで初期化を延期する)の値は、初期化が高価な場合(時間、メモリ、その他のリソースなど)に発生します。 –