Ввод хеша со значениями по умолчанию - PullRequest
2 голосов
/ 18 марта 2012

Я хотел бы инициализировать класс с отдельными членами хэша, установленными в значения по умолчанию, я попытался сделать следующее:

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'

Как мне ввести хэш в качестве аргумента для инициализации в усадьбе, которая устанавливаетзначения по умолчанию для отдельных членов хэша, просто хэш сам?

1 Ответ

5 голосов
/ 18 марта 2012

Нет способа сделать это без пользовательского кода.Простейшей версией этого будет:

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

Это позволит передавать дополнительные свойства в хеш, но я предполагаю, что это желательно, поскольку вы намеренно использовали расширяемый ввод для начала.

...