如何检查Ruby中是否定义了私有方法 [英] How to check if private method is defined in ruby

查看:65
本文介绍了如何检查Ruby中是否定义了私有方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我能找到的最接近的是Ruby,如何检查方法"foo =()"是否有效?,但仅在方法是公共方法时才有效,即使在类块中也是如此.

The closest I can find is In Ruby, how do I check if method "foo=()" is defined?, but it only works if the method is public, even when inside the class block.

我想要什么:

class Foo
  private

  def bar
    "bar"
  end

  magic_private_method_defined_test_method :bar #=> true
end

我尝试过的事情:

class Foo
  private

  def bar
    "bar"
  end

  respond_to? :bar #=> false
  #this actually calls respond_to on the class, and so respond_to :superclass gives true
  defined? :bar #=> nil
  instance_methods.include?(:bar) #=> false
  methods.include?(:bar) #=> false
  method_defined?(:bar) #=> false
  def bar
    "redefined!"
  end # redefining doesn't cause an error or anything

  public
  def bar
    "redefined publicly!"
  end #causes no error, behaves no differently whether or not #bar had been defined previously
end

推荐答案

您要 Module#

You want Module#private_method_defined?.

class Foo
  def do_stuff_if_bar_is_defined
    if self.class.private_method_defined?(:bar)
      do_stuff
    end
  end

  private

  def bar
    "bar"
  end

  private_method_defined? :bar #=> true
end
Foo.private_method_defined? :bar #=> true

这篇关于如何检查Ruby中是否定义了私有方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆