有没有办法在 Ruby 中访问方法参数?

2024-02-03

Ruby 和 ROR 的新手,每天都喜欢它,所以这是我的问题,因为我不知道如何用 google 搜索它(我已经尝试过:))

我们有方法

def foo(first_name, last_name, age, sex, is_plumber)
    # some code
    # error happens here
    logger.error "Method has failed, here are all method arguments #{SOMETHING}"    
end

所以我正在寻找一种方法来将所有参数传递给方法,而不列出每个参数。因为这是 Ruby,我认为有一种方法:)如果它是 java,我只会列出它们:)

输出将是:

Method has failed, here are all method arguments {"Mario", "Super", 40, true, true}

在 Ruby 1.9.2 及更高版本中,您可以使用parameters方法上的方法以获取该方法的参数列表。这将返回一个对的列表,指示参数的名称以及是否需要它。

e.g.

如果你这样做

def foo(x, y)
end

then

method(:foo).parameters # => [[:req, :x], [:req, :y]]

您可以使用特殊变量__method__获取当前方法的名称。因此,在方法中,可以通过以下方式获取其参数名称

args = method(__method__).parameters.map { |arg| arg[1].to_s }

然后您可以显示每个参数的名称和值

logger.error "Method failed with " + args.map { |arg| "#{arg} = #{eval arg}" }.join(', ')

Note:因为这个答案最初是在当前版本的 Ruby 中编写的eval不能再用符号来调用。为了解决这个问题,明确to_s已在构建参数名称列表时添加,即parameters.map { |arg| arg[1].to_s }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 Ruby 中访问方法参数? 的相关文章

随机推荐

  • 测试 DataFrame 中的后续值

    我有一个 DataFrame 其中一列包含正整数和负整数 对于每一行 我想查看有多少连续行 从当前行开始并包括当前行 具有负值 所以如果一个序列是2 1 3 1 1 结果将是0 2 1 0 1 我可以通过迭代所有索引来做到这一点 使用 il
  • Python:如何让我的 tkinter 应用程序正确退出?

    我需要知道如何在 Mac 上执行此操作 因为每当我尝试退出它时 我都必须强制退出它 当用户单击退出按钮时 是否有正确的方法使 Tkinter 正常退出 我知道怎么做了 我只是放了一个简单的exit 主循环之后的命令
  • 在 Win32 / COM 方法上调用 PInvoke 时,通常会出现明显的性能影响吗?

    我想知道是否有人对在托管 Net 代码的 Win32 方法上使用 DLLImport PInvoke 的负面方面有一个不错的解释或概述 我计划使用各种 Win32 方法 并希望更好地了解这样做的负面影响 Thanks Brian 根据MSD
  • 如何在 EF CF 中设置 POCO 的默认值?

    在实体框架代码优先方法中 如何为 POCO 的 EntityConfiguration 类中的属性设置默认值 public class Person public int Id get set public string Name get
  • 应用程序最小化时的 Android 活动和片段生命周期问题

    我有一个带有多项选择列表的片段 我正在尝试保存当前在列表中检查的项目的实例 并在应用程序最小化等情况下恢复它们 测试步骤 到达多选列表片段 检查一些列表项 按主页键最小化应用程序 按多任务按钮并选择我的应用程序来恢复它 以下是我正在使用的代
  • PDFBox - PageDrawer 在 PdfPagePanel 外部绘制

    我正在使用 PDFBox 在我的应用程序中显示生成的 pdf 文件 我将 PdfPagePanel 添加到 JScrollPane 中 当我缩小窗口并出现滚动条时 PageDrawer 会绘制到滚动条上 这种效果也出现在 PDFReader
  • 如何在XSLT中实现if-else语句?

    我试图在 XSLT 中实现 if else 语句 但我的代码无法解析 有人有什么想法吗
  • 显示 git diff,忽略文件权限更改?

    我跑过好几个chmod在我的实时服务器中 现在当我做一个git diff在那里 我看到很多old mode 100644 new mode 100755 我还在那里更改了一些文件 但我只是 git diff 只是为了显示文件上的更改 忽略文
  • 保留的 ASP.NET MVC 控制器名称?

    所以我花了大约一个小时来调试为什么我收到客户端 404 和服务器端System Web Http HttpResponseException on System Web Http dll System Web Http Dispatcher
  • Chromium WebView 不存在

    我正在尝试使用 Phonegap 创建一个 Hello World 应用程序 但当我调用在模拟器上运行该应用程序时 它崩溃了 我遵循了指南here http docs phonegap com en edge guide platforms
  • Scikit-learn 从分段时间序列创建标记数据集

    INTRO 我有一个 Pandas DataFrame 代表分段的不同用户 即 user1 和 user2 的时间序列 我想使用上述 DataFrame 训练 scikit learn 分类器 但我无法理解必须创建的 scikit lear
  • 生成渐变进度条

    我正在使用下面的代码在进度栏中显示渐变 那么如何创建如上图所示的渐变进度条呢 我已经尝试了很多解决方案但还没有成功
  • 这段 PHP 代码有什么作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 最近接管一个网站 在多个文件中发现以下代码 认为是恶意代码 关于它的作用有什么想法吗 它似乎 第一行是 POST 第二行检查 POST 是
  • 当属性丢失时,如何强制 System.Text.Json 序列化程序抛出异常?

    Json NET 行为可以通过属性定义 如果 json 负载不包含必需的属性 则使用默认值或仅抛出异常 Yet System Text Json序列化器默默地什么也不做 正在上课 public sealed class Foo Requir
  • 为列的每种不同类型提取多个相似行

    Input col1 col2 col3 apple d 10 apple d 44 apple e 55 orange d 99 orange c 33 orange d 10 banana e 55 banana d 10 所需输出 c
  • 如何在 Linux 上的 VS Code 上捕获 C 程序中的 CTRL+C?

    在 Linux 上用 VS Code 编写 C 代码 I use signal SIGINT myhandler signal SIGHUP myhandler signal SIGKILL myhandler signal SIGTERM
  • NGINX 和 Gunicorn 并行运行的目的是什么?

    许多通过 Amazon EC2 部署的 Django 应用程序都使用 HTTP 服务器 NGINX 和 Gunicorn 我想知道它们实际上是做什么的以及为什么两者并行使用 并行运行它们的目的是什么 它们不并行使用 NGINX 是一个反向代
  • 当我在 Electron 应用程序中双击打开文件时,Argv[1] 返回意外值

    我正在尝试双击打开文件 该文件是使用 electro packager 为 Mac App Store 构建的 我进行了一些设置 以便在双击文件时打开我的电子应用程序 但是双击文件的文件名不会在命令行参数中传递给应用程序 argv 0 返回
  • 在多种条件下合并来自多个数据帧的数据

    我想合并多个数据帧 但前提是键匹配并且日期范围位于 df1 中 InitialAdmit 日期范围的 90 天内 我想保留 df1 中的所有行 并且仅合并 df2 df3 等中的其他行 只要它们与键匹配并在日期范围内即可 注意 先合并 df
  • 有没有办法在 Ruby 中访问方法参数?

    Ruby 和 ROR 的新手 每天都喜欢它 所以这是我的问题 因为我不知道如何用 google 搜索它 我已经尝试过 我们有方法 def foo first name last name age sex is plumber some co