检查是否定义了在Proc内编写的方法?

问题描述

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

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

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

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

我已经测试过defined? pdefined? p.call,但这不是照看的结果...

感谢您的帮助!

解决方法

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

为此,您应该使用:

1.method(:+)

如果该方法不存在,则会出现NameError异常。但是,这并不是最好的测试方法,相反,它有一个更简单的方法:

1.respond_to?(:+)

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

不幸的是,一旦在Proc中包装了一些有效的Ruby代码,就无法在不执行的情况下对其进行测试。这意味着,如果您拥有Proc,则基本上是一个黑匣子,可以不深入研究VM中的技巧,但这是特定于Ruby实现的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...