Julia如何通过编程获取指定方法的关键字参数名称列表
解决方案
你可以通过Julia内置的未导出函数Base.kwarg_decl实现该需求,以下是封装完成的kwargs函数:
function kwargs(obj) # 若传入为函数则默认取第一个方法,可自行调整方法匹配逻辑适配多方法场景 target_method = obj isa Function ? first(methods(obj)) : obj return Base.kwarg_decl(target_method) end
测试效果
针对你给出的函数定义:
function f(a = 1; first = 5, second = "asdf") return a end
调用后返回结果符合预期:
kwargs(f) # returns [:first, :second] kwargs(methods(f).ms[1]) # returns [:first, :second]
注意事项
- 若函数存在多个方法,传入函数对象时默认取第一个方法的关键字参数,需要获取指定方法的参数时直接传入对应
Method对象即可 - 该实现兼容Julia 1.0及以上版本,无需引入额外依赖
- 若对应方法没有定义关键字参数,调用后会返回空符号数组
Symbol[]
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

