为什么我这样做会弄错 C.respond_to?(:initialize)
class C
def initialize;end
def meth;end
end
C.respond_to?(:initialize) #=> false
C.new.respond_to?(:meth) #=> true as expected
Run Code Online (Sandbox Code Playgroud)
另一种变化
class C
def initialize;end
def meth
pmeth
end
private
def pmeth
respond_to?(:initialize)
end
end
Run Code Online (Sandbox Code Playgroud)
这是因为#initialize
不是公共方法.如果要通过使用检查私有受保护方法#respond_to?
,请将第二个参数设置为true
.
文件明确说明
如果obj响应给定方法,则返回true.仅当可选的第二个参数的计算结果为true时,才会在搜索中包含专用和受保护的方法.
见下文:
class C
def initialize;end
def meth;end
end
C.respond_to?(:initialize,true)
# => true
C.new.respond_to?(:initialize)
# => false
C.new.respond_to?(:initialize,true)
# => true
C.private_methods(false).include?(:initialize) # => true
C.new.private_methods(false).include?(:initialize) # => true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
180 次 |
最近记录: |