e-6ren">
gpt4 book ai didi

ruby - respond_to?() 来自脚本的顶层

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:35 24 4
gpt4 key购买 nike

我可以在 irb 的主要对象中使用 respond_to?():

irb(main):001:0> def foo
irb(main):002:1> "hi"
irb(main):003:1> end
=> nil
irb(main):004:0> respond_to?(:foo)
=> true
irb(main):005:0> self
=> main

但是当我将其放入脚本时,它似乎并没有像我预期的那样工作:

$ cat test.rb
#! /usr/local/bin/ruby
def foo
"hi"
end
puts respond_to?(:foo)
puts self

$ ./test.rb
false
main

这是怎么回事?

编辑:

irb 行为在 1.9.3 中对我有效,但在 2.2.0 中无效。但无论如何,是否可以从脚本中使用 respond_to?()?

作为替代方案,我可以从对 send() 的调用中捕获 NoMethodError,但这也会从有效方法内部捕获此类异常,这使错误处理有点复杂。

最佳答案

在顶层定义的方法是 Object 的私有(private)方法,默认情况下 respond_to?仅对公共(public)方法返回 true。要检查私有(private)方法和 protected 方法,请将 include_all 参数设置为 true:

def foo
"hi"
end

puts respond_to?(:foo, true)
puts self

现在当脚本运行时,respond_to?(:foo, true) 应该返回 true:

$ ./test.rb
true
main

关于ruby - respond_to?() 来自脚本的顶层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com