如何在 ruby​​ 函数中传递 kwargs?基于Python的例子

Yur*_*nov 0 ruby python keyword-argument

环境:

$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
Run Code Online (Sandbox Code Playgroud)

问题:

python 上有一个例子:

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

print(any_func(25, c=30))  # will print 30
Run Code Online (Sandbox Code Playgroud)

我怎样才能在红宝石上做同样的事情?
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
Run Code Online (Sandbox Code Playgroud)

mrz*_*asa 5

在 Ruby 中,您需要使用类似哈希的语法

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

any_func(25, c: 30)
Run Code Online (Sandbox Code Playgroud)

def fun(a=1)仅设置默认值。如果有any_func(25, c = 30),则意味着“使用any_func两个参数进行调用,25 和表达式结果c = 30(即 30)”

阅读更多


Hol*_*ust 5

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

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

puts any_func(25, c: 30)
Run Code Online (Sandbox Code Playgroud)

您可以参考官方语法文档来了解如何使用参数声明和调用方法。

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