ruby - Rubocop cop 找出类上是否存在方法
问题描述
我有以下课程:
class XXX
def aa
end
def authorized?
false
end
def bb
end
end
并希望确保authorized?
Rubocop 存在方法。以下代码适用于 Rubocop 控制台:
code = "
class XXX
def aa
end
def authorized?
false
end
def bb
end
end
"
node = RuboCop::ProcessedSource.new(code, RUBY_VERSION.to_f).ast
NodePattern.new('(class ... (begin (def :aa ...)(def :authorized? ...)(def :bb ...) ) )').match(node)
最后一行返回true
。但是,我不想依赖任何方法。所以我将最后一行替换为
NodePattern.new('(class ... (begin (...)(def :authorized? ...)(...) ) )').match(node)
它有效,代码不依赖于方法的名称。但!我也想让它在没有其他方法存在或有更多方法时工作。
基本上,最终目标是检查方法是否在类上定义。我怎么做?
解决方案
我不确定 Rubocop 和节点解析方法,这是其中的一部分,但你可以只使用常规的 Ruby 内省吗?
XXX.instance_methods.include?(:authorized?)
如果它需要在XXX
类本身上(而不是任何包含的模块或超类),
XXX.instance_methods.include?(:authorized?) && XXX.instance_method(:authorized?).owner == XXX
推荐阅读
- python-3.x - 找不到数据源:kafka
- android - RecyclerView 数据传递给同一个 Activity
- php - 如何在多个给定输入后输出用户详细信息?
- python - 如何关闭使用 pdfquery 打开的文件,它阻止了 pdf 文件?
- c++ - 并行 For 循环:查找已排序数组是否包含重复元素
- r - 如何将分组变量添加到数据集中,该数据集将根据某些条件对观测值及其 N 个邻居进行分类
- r - 筛选R中某个范围内的元素
- python - 使用代码在 python 中启用/禁用断言语句
- r - 如何根据R中的出生日期评估十二生肖?
- node.js - RabbitMQ 在比较同一队列中的其他消息后使用消息并重新排队