Расширение пустого хеша в переменной с двойным знаком в Ruby

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

Моя рубиновая версия

ruby 2.2.6p396 (2016-11-15 revision 56800)

сценарий

class MyClass
  def my_method; end
end

MyClass.new.my_method(*[]) # returns nil

MyClass.new.my_method(**{}) # returns nil

MyClass.new.my_method(*[], **{}) # returns nil


# Using variables

values = []
k_values = {}

MyClass.new.my_method(*values) # returns nil

MyClass.new.my_method(**k_values) # *** ArgumentError Exception: Wrong number of arguments. Expected 0, got 1.

MyClass.new.my_method(*values, **k_values) # *** ArgumentError Exception: Wrong number of arguments. Expected 0, got 1.


# In summary

MyClass.new.my_method(**{}) # returns nil

MyClass.new.my_method(**k_values) # *** ArgumentError Exception: Wrong number of arguments. Expected 0, got 1.

Кто-нибудь знает, почему это происходит? Это ошибка?

1 ответ

Решение

Да, это очень похоже на ошибку

def foo(*args)
  args
end

foo(**{})
# => []

h = {}

foo(**h)
# => [{}]

Он передает пустой хеш в качестве первого аргумента в случае двойного знака переменной.

Моя версия ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]

Другие вопросы по тегам