Ruby 具有命名参数的函数如何改为使用哈希调用?

How can Ruby functions with named arguments get called with a hash instead?

我试图让这个 foo 函数输出 "first" 然后 "second" 但它输出的是 {:x=>"first", :y=>"second"} 和 "this is y".

如何使用散列作为命名参数?

def foo(x='hi', y='this is y')
  puts x
  puts y
end

hash = {x: 'first', y: 'second'}
foo(**hash)

只需使用散列调用方法:foo(hash)

更大的问题:您没有使用命名参数(或更好的关键字参数),而是使用具有默认值的参数。要使用命名参数,您不能不使用 = 而是 :.

def foo(x: 'hi', y:'this is y')
  puts x
  puts y
end

hash = {x: 'first', y: 'second'}
foo(hash)