active_support/core_ext/array/extract_options.rb
class Hash
def extractable_options?
instance_of?(Hash)
end
end
class Array
def extract_options!
if last.is_a?(Hash) && last.extractable_options?
pop
else
{}
end
end
end
在 extract_options!
中为啥要先判断 is_a?
再判断 instance_of?
呢?
我的理解是后者约束条件更强,没必要使用 is_a?
方法吧。
class H < Hash;
end
h = H.new(:hello => :world)
p h.is_a? H
p h.is_a? Hash
p h.instance_of? H
p h.instance_of? Hash
=begin
true
true
true
false
=end