我想知道是否可以使用0个参数调用方法count
:
@object.count()
在@object
上而不引发错误。有没有一种方法可以给我这些信息?
如果没有,那么实施它是否有任何问题:
begin
count = @object.count()
# Do anything with the information
rescue ArgumentError => e
end
答案 0 :(得分:3)
首先:检查一个方法的参数个数听起来有些不对劲。 其次,你正在寻找" arity":
@object.method(:count).arity
在您可能想要检查对象是否响应给定方法之前。
@object.respond_to?(:count) && @object.method(:count).arity == 0
请注意,如果方法采用可变数量的参数,那么arity就不那么直观了:
对于采用可变数量参数的Ruby方法,返回 -n-1,其中n是所需参数的数量。对于用C编写的方法,如果调用采用可变数量的参数,则返回-1。
答案 1 :(得分:3)
我们可以将问题改为:该方法是否具有任何必需参数?或者:没有所需的参数吗?
@object.method(:count).parameters.none? {|type, _| [:req, :keyreq].include?(type) }
这将允许您捕获具有可选参数和默认参数的方法,具有可选关键字参数和默认值的方法,以及具有可选休息参数的方法。
我发现parameters
比重载的单整数返回值arity
更容易处理。
答案 2 :(得分:0)