代码之家  ›  专栏  ›  技术社区  ›  user1934428

Ruby和.irbrc:查找是否定义了方法。

  •  1
  • user1934428  · 技术社区  · 6 年前

    我在我的.irbrc中有一个函数,它基本上是从某些输入参数构建一个字符串,然后应该检查是否存在另一个名为该字符串的函数。我就是这样做的

    methodname = ... # Calculate a string
    if respond_to?(methodname)
      ....
    end
    

    这对你来说不起作用?即使在我认为应该返回true的情况下也返回false。我把这个问题归结为以下几个简单的例子:

    def foo
    end
    def respond_to_foo?
      respond_to?(:foo)
    end
    puts "Respond: #{respond_to_foo?}"
    

    跑步 irb 是的 相反。不过,我还是能跑 foo 从irb内部。

    我想这与irb定义我的方法的范围有关。例如, self.foo 不起作用( 为main:Object调用了私有方法“foo” ),而 send.foo

    有人能启发我吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   user1934428    6 年前

    回答我自己的问题:我突然想到,我可以

    private_methods.include?(:foo)
    

    这确实管用,但在我看来有点像黑客。如果有人知道更好的方法,请告诉我。