【问题标题】:Is it possible to get the default value for keyword arguments in Ruby?是否可以在 Ruby 中获取关键字参数的默认值?
【发布时间】:2021-06-02 18:11:02
【问题描述】:

我正在寻找带有关键字参数的函数的默认值。 示例:

def some_method(foo: 1, bar: 2)
end

我的预期输出是这样的

{ foo: 1, bar: 2 }

method上定义的parameters方法只提供参数名。

【问题讨论】:

标签: ruby


【解决方案1】:

您可以获取键,但不能获取值,因为在实际调用方法之前它们不会被实际设置。您可以使用Method#parameters 获取方法的参数。例如,使用上面的示例代码:

method(:some_method).parameters
#=> [[:key, :foo], [:key, :bar]]

然而,:foo 和 :bar 键在方法运行之前并没有真正设置,所以除了可能内省方法定义本身之外,没有办法获取“值”。

【讨论】:

  • 我可以使用自省来做到这一点,但我很难想出一个好的解决方案。
  • @MarkRamasco 如果您从文件中运行,您可能可以使用 RBS 和/或 TypeProf 来完成,或者只是 grepping 方法定义并解析它。但是,从 REPL 中,您无法访问 irb 中的源,并且可能需要从 pry 中劫持 stdout(这通常是一个坏主意)以匹配来自 show-source 或 show-method 的输出。由于我解释说 Ruby 在调用之前不会设置默认参数,因此如果您解释您的用例,您可能会得到更好的答案;这可能是 X/Y 问题。
  • 没有过多的细节,我不得不围绕一个自定义的遗留框架编写一个适配器来编写测试。这是建立在多年的工作基础上的,因此我们无法轻易改变这种情况。本质上,该框架允许某人编写一个描述,该描述使用字符串插值来填充来自测试输入参数的值。这是一切都错了的场景之一,但我需要找到解决方案。最后,我使用sorcerer 解析源代码时遇到了一个非常笨拙的工作。
猜你喜欢
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2015-02-21
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多