Ruby将数字作为键(键值)传递给** kwargs

时间:2016-08-26 13:34:24

标签: python ruby

如何将数字作为键(键值)传递给** kwargs?换句话说,为什么不能将数字作为键(键值)传递给** kwargs?这是错误:

修改

def func(**kwargs)
 puts kwargs.class
 p kwargs
end

func(a={:alpha => 1, :beta => 2, :gamma => 3})
# wrong number of arguments (1 for 0) (ArgumentError)
func(n = {1 => 'alpha', 2 => 'beta', 3 => 'gamma'})

在Python中,这可行:

def func(**kwargs):       
        print(type(kwargs).__name__)
        print(kwargs)

func(a={'alpha': 1, 'beta': 2, 'gamma': 3})
func(n = {1: 'alpha', 2: 'beta', 3: 'gamma'})

请帮忙。

1 个答案:

答案 0 :(得分:2)

kwargs表示: K ey w ord A rguments

在ruby的情况下,你只能传递一个符号作为关键。 (如果还有其他事情,请纠正我)

所以这样的事情不起作用:

func("a" => "foo")
func(1 => "bar")
func(Object.new => "baz")

这些都会创建一个哈希并将其作为第一个位置参数传递给函数。但是你的方法没有任何位置参数。因此错误。

您只能使用:

func(a: "this")
func(whatever: Object.new)