gpt4 book ai didi

ruby - 有没有办法判断 `method_missing` 是否被显式调用?

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:02 26 4
gpt4 key购买 nike

在方法定义中,有没有办法判断方法 method_missing 是被显式调用还是作为钩子(Hook)方法被调用?

使用方法initialize,可以通过执行以下操作来判断它是被显式调用还是作为钩子(Hook)调用:

class A
def initialize
puts caller
end
end

当作为钩子(Hook)调用时,initialize 方法有一行 new:

a = A.new
# => ...:in `new'
# => ...
# => ...:in `<main>'

当显式调用时,它没有这样的行(除非它是从 new 显式调用的):

a.send(:initialize)
# => ...
# => ...:in `<main>'

但是当我用 method_missing 做类似的事情时,我无法区分这两种情况:

class A
def method_missing *;
puts caller
end
end

a.foo
# => ...
# => ...:in `<main>'

a.method_missing
# => ...
# => ...:in `<main>'

最佳答案

你可以检查第一个参数:

class A
def method_missing(name = nil, *)
if name
puts "called via `#{name}'"
else
puts "called directly"
end
end
end

A.new.foo
#=> called via `foo'

A.new.method_missing
#=> called directly

关于ruby - 有没有办法判断 `method_missing` 是否被显式调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250641/

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