gpt4 book ai didi

Ruby 方法自省(introspection)

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

我正在玩自省(introspection),想在运行时提取参数计数和参数名称。是否有可能实现这样的东西?

class Greeter
def self.greet(name, weekday = "Friday")
"Hello #{name}. Today is #{weekday}"
end

def self.splatter(*arguments)
arguments.join("|")
end
end

Greeter.argument_count(:greet)
=> 1..2

Greeter.argument_names(:greet)
=> [:name, :weekday]

Greeter.argument_count(:splatter)
=> [0..Infinity]

我不知道如何检索参数的名称。

但是,我通过故意调用带有大量随机参数的方法来触发 ArgumentError,然后从异常消息中提取允许的参数数量,从而设法提取了参数计数。但是,这很危险,不适用于 splat 方法签名。

最佳答案

这些东西有一个既定的格式。您可以修改以下内容以满足您的需要。

class Object
def argument_count m; method(m).arity end
def argument_names m; method(m).parameters end
end

Greeter.argument_count(:greet) # => -2
Greeter.argument_names(:greet) # => [[:req, :name], [:opt, :weekday]]

关于Ruby 方法自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688737/

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