是否有可以在方法上调用的方法来列出关键字参数?
我正在寻找的是类似的东西
self.keyword_arguments
Run Code Online (Sandbox Code Playgroud)
例如,在下面的示例中,我正在寻找一个数组:
[:var1, :var2]
Run Code Online (Sandbox Code Playgroud)
def test( var1: true, var2: false)
self.keyword_arguments
end
Run Code Online (Sandbox Code Playgroud)
在 Ruby 中,方法不是一流对象。引用一个方法已经执行了它。这就是为什么我们经常使用符号通过名称来引用方法。为了以面向对象的方式处理方法,Ruby 提供了类Method作为包装器。一旦获得Method方法的实例,您就可以内省它(或让它内省本身)。
这有点复杂,但这就是您处理它的方法:
def test( var1: true, var2: false)
method(__method__)
.parameters
.filter_map { |k, v| v if k == :key || k == :keyreq }
end
test
#=> [:var1, :var2]
Run Code Online (Sandbox Code Playgroud)
解释:
method通过名称查找方法并返回其Method实例__method__以符号形式返回当前方法的名称,即:test在上面的代码中(通过硬编码method(:test)也可以)parameters以类型/名称对的形式返回参数数组对于您的方法,后者返回[[:key, :var1], [:key, :var2]]并:key表示一个可选关键字参数(具有默认值)。:keyreq将表示必需的关键字参数(没有默认值的参数),但您的方法中没有任何关键字参数。
还有:keyrest任意关键字参数,例如**kwargs. 我没有包含:keyrest在输出中,因为**参数名称仅供该方法的“内部”使用,而调用者实际上并未使用它来传递这些额外的关键字参数。
filter_map然后返回我们感兴趣的键的值(即参数名称)。
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |