2012-03-17 4 views
2

でハッシュを入力、私は次のことを試してみました:は、私はデフォルト値に設定されたハッシュの個々のメンバーを持つクラスを初期化したいデフォルト値

希望として働いてい
class SomeClass 
    attr_accessor :hello, :holla 
    def initialize (hash = { hello: 'world', holla: 'mundo'}) 
    @hello = hash[:hello] 
    @else = hash[:holla] 
end 
end 

入力しないいずれかの操作を行う場合引数

p = SomClass.new 
puts "should be 'world'" 
puts p.hello 
puts "should be 'mundo'" 
puts p.holla 

$ruby hello_world.rb 
should be 'world' 
universe 
should be 'mundo' 
mundo 

が、ハッシュの増強材の一方が他方に設定されている場合、例えば、空のままにされている:

p = SomeClass.new({ hello: 'universe'}) 
puts "should be 'universe'" 
puts p.hello 
puts "should be 'mundo'" 
puts p.holla 

$ruby hello_world.rb 
should be 'universe' 
universe 
should be 'mundo' 

ハッシュの個々のメンバーのデフォルト値を設定するマナーの初期化の引数としてハッシュを入力する方法を教えてください。

答えて

5

カスタムコードなしでこれを行う方法はありません。追加のプロパティは、ハッシュで渡すことができます

def initialize(hash = {}) 
    hash = {hello: "world", holla: "mondo"}.merge(hash) 
    # now your default values are set, but will be overridden by the passed argument 
end 

、私はあなたが意図的に開始するための拡張可能な入力を使用するのでそれが望ましいと仮定します。その最も簡単なバージョンは次のようになります。

関連する問題