ruby - 检查是否定义了在 Proc 中编写的方法?
问题描述
出于某种原因,我将方法存储在 Proc 中,并且我想检查它们是否已定义。
如果我这样做:defined? 1.+
我得到method
回报,所以我知道+
方法已定义。
现在,如果我将方法存储在 Proc :p = Proc.new { 1.+ }
中,
我想知道如何检查存储的方法p
是否已定义
我已经测试过defined? p
,defined? p.call
但不是参加的结果...
谢谢你的帮助 !
解决方案
defined?
用于测试是否定义了变量或是否存在常量,而不是方法本身。
为此,您应该使用:
1.method(:+)
如果该方法不存在,则会出现NameError
异常。不过,这不是最好的测试方法,而是有一个更简单的方法:
1.respond_to?(:+)
如果该方法“响应”该方法调用,它将(通常)返回true
。由于 Ruby 是一种高度动态的编程语言,并且可以通过method_missing
其他技巧在现场编写方法,因此这可能不是 100% 准确,但它适用于预定义的方法。
不幸的是,一旦您将一些有效的 Ruby 代码包装在 aProc
中,就无法再测试它是否会在不执行它的情况下工作。这意味着如果你有一个 Proc,它基本上是一个黑盒子,没有深入研究 VM 中的技巧,但这是特定于 Ruby 实现的。
推荐阅读
- javascript - RegExp 问号无法正常工作
- node.js - 用于节点 + 静态文件的 nginx 配置未捕获
- css - 如何制作 3d css 胶囊
- google-apps-script - 带有下拉输入的 Google Sheet 自定义对话框
- javascript - 在编译器实例上从 webpack 获取构建条目
- reactjs - 如何对 React 编译器执行 Null 检查
- mysql - 您可以索引数据库中具有相同列名的所有表中的列吗?
- go - 关闭 Go http.Client 的连接池
- azure - 错误:无法将参数“executionContext”绑定到类型 ExecutionContext
- list - Flutter:列表视图显示空白或白屏?