如何在 ruby 函数中传递 kwargs?基于 python 示例

How to pass kwargs in ruby function? Based on python example

环境:

$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

问题:

python上有例子:

def any_func(a, b=2, c = 0, d=None):
    return c

print(any_func(25, c=30))  # will print 30

我怎样才能在 ruby 上做同样的事情?
ruby 如何调用“kwargs”?我想知道进一步搜索。

我在 ruby 上尝试了以下代码:

#!/usr/bin/env ruby
def any_func(a, b = 2, c = 0, d = nil)
  c
end

puts any_func(25, c = 30)  # will print 0, 30 is expected

在Ruby中你需要使用类似散列的语法

def any_func(a, b: 2, c: 0, d: nil)
  c
end

any_func(25, c: 30)

def fun(a=1) 只设置一个默认值。如果您有 any_func(25, c = 30),则表示 "call any_func with two arguments, 25 and result of expression c = 30 (that is 30)"

Read more

Ruby 有位置参数和关键字参数。与 Python 不同,您不能混合使用它们,而必须使用各自的语法声明它们,并在方法调用中相应地提供它们。

def any_func(a, b: 2, c: 0, d: nil)
  c
end

puts any_func(25, c: 30)

您可以参考 official syntax documentation 了解更多关于如何声明和调用带参数的方法。

至于您自己使用 any_func(25, c = 30) 调用 any_func 方法的示例,这里发生的是您在调用上下文中创建了值为 c 的局部变量 c =14=]。您还将此值传递给方法的第二个(可选)参数 b