types - Julia:是否可以将参数字典传递给函数?
问题描述
我有一个要传递给函数的函数参数字典。例如:
function test_function(foo::Int, bar::String)
#...
end
params = Dict(
"foo" => 1,
"bar" => "baz"
)
在 Python 中,我可以像这样将所有参数作为 kwargs 传递:
def test_function(foo: int, bar: str):
#...
params = {
"foo": 1
"bar": "baz"
}
test_function(**params)
但是当我尝试时params...
,我收到以下错误:
julia> test_function(params...)
ERROR: MethodError: no method matching test_function(::Pair{String,Any}, ::Pair{String,Any})
有没有办法在 Julia 中做类似的事情?
解决方案
Julia 明确区分了位置参数和关键字参数。为了澄清区别,您可以使用分号将位置参数与关键字参数分开。您可以使用 将对象解包为位置参数或关键字参数...
,这称为splatting 运算符。
如果要将对象解包为关键字参数,则它需要是对或元组的迭代器。如果您将对象解压缩到位置参数中,则解压缩的元素类型需要匹配函数的方法之一。
这是一个例子:
function foo(x, y; a=1, b=2)
x + y + a + b
end
t = (1, 2)
d = Dict(:a => 3, :b => 4)
julia> foo(t... ; d...)
10
但是,请注意,字典中的键(或对/元组的迭代器)必须是符号,以便解包到关键字参数中才能工作:
julia> e = Dict("a" => 3, "b" => 4);
julia> foo(t... ; e...)
ERROR: MethodError: Cannot `convert` an object of type String
to an object of type Symbol
推荐阅读
- reactjs - Storybook 是否支持异步导入?
- javascript - 在 EJS 模板中,为什么 Javascript 承诺在写在 1 行时可以工作,但在 3 行时会失败?
- java - 如何在同一行中同时打印 bool 和 double?
- javascript - 如何在页面上只获取我感兴趣的 HTML?
- angular - 在 Angular 8 组件中切换 MatSlideToggle
- javascript - 在链接构造函数中使用“this”
- python - Pandas 滚动函数加值
- windows - 将 Docker 容器中的文件夹与本地计算机上的文件夹连接 - 权限被拒绝
- python - 使用相邻单元格中的名称保存 excel 中的图像
- c++ - C(++) 短减 short = int?