首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rubocop cop以确定类上是否存在方法

Rubocop cop以确定类上是否存在方法
EN

Stack Overflow用户
提问于 2019-04-06 02:55:18
回答 1查看 221关注 0票数 0

我有以下类:

代码语言:javascript
复制
class XXX
  def aa
  end

  def authorized?
    false
  end

  def bb
  end
end

并希望确保Rubocop中提供了方法authorized?。以下代码可在Rubocop控制台中运行:

代码语言:javascript
复制
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。但是,我不想依赖任何方法。因此我将最后一行替换为

代码语言:javascript
复制
NodePattern.new('(class ... (begin (...)(def :authorized? ...)(...) ) )').match(node)

它是有效的,代码不依赖于方法的名称。但!我也想让它在没有其他方法的情况下工作,或者如果有更多的方法。

基本上,最终目标是检查是否在类上定义了方法。我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2019-04-06 05:39:23

我不太确定Rubocop和节点解析方法,这也是其中的一部分,但你能不能只使用常规的Ruby自省?

XXX.instance_methods.include?(:authorized?)

如果它需要在XXX类本身上(与任何包含的模块或超类相反),

XXX.instance_methods.include?(:authorized?) && XXX.instance_method(:authorized?).owner == XXX

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55541773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档