【问题标题】:Check if a method written inside a Proc is defined?检查是否定义了在 Proc 中编写的方法?
【发布时间】:2020-10-16 13:15:53
【问题描述】:

出于某种原因,我将方法存储在 Proc 中,我想检查它们是否已定义。

如果我这样做:defined? 1.+ 我得到method 作为回报,所以我知道+ 方法已定义。

现在,如果我将方法存储在 Proc 中:p = Proc.new { 1.+ }

我想知道如何检查存储在p 中的方法是否已定义

我已经测试了defined? pdefined? p.call,但这不是参加的结果...

感谢您的帮助!

【问题讨论】:

  • 让标签解释使用的语言,将标题重点放在问题上。

标签: ruby proc defined


【解决方案1】:

defined? 用于测试是否定义了变量或是否存在常量,而不是方法本身。

为此,您应该使用:

1.method(:+)

如果该方法不存在,您会得到NameError 异常。不过,这不是最好的测试方法,而是有一个更简单的方法:

1.respond_to?(:+)

如果该方法“响应”该方法调用,它将(通常)返回true。由于 Ruby 是一种高度动态的编程语言,并且可以通过 method_missing 和其他技巧在现场制作方法,因此这可能不是 100% 准确,但它适用于 预定义 方法。

不幸的是,一旦您将一些有效的 Ruby 代码封装在 Proc 中,就无法再测试它是否会在不执行的情况下工作。这意味着如果你有一个 Proc,它基本上是一个黑盒子,没有深入研究 VM 中的技巧,但这是特定于 Ruby 实现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多