gpt4 book ai didi

julia - 如何通过元组将关键字和关键字变量值传递给函数

转载 作者:行者123 更新时间:2023-12-04 18:29:31 25 4
gpt4 key购买 nike

您可以通过带有省略号的元组轻松地将“正常”(即非关键字)变量值传递给函数,例如:

julia> f(x, y, z) = x + y + z;

julia> f(0, 1, 2)
3

julia> varvalues = 0, 1, 2
(0,1,2)

julia> f(varvalues...)
3

但是对于关键字变量,如何通过变量既传递关键字又传递对应的变量值呢?像例如(原谅这个愚蠢的例子):
julia> function g(x, y, z; operation = "add", format = "number")
operation == "add" && format == "number" && return x + y + z
operation == "add" && format == "string" && return string(x + y + z)
operation == "times" && format == "number" && return x * y * z
operation == "times" && format == "string" && return string(x * y * z)
end; # yep, I know this not type-stable

julia> g(0, 1, 2, operation = "times", format = "string")
"0"

julia> g(varvalues..., operation = "times", format = "string") # varvalues = (0,1,2)
"0"

所以我想定义两个变量,类似于 varvalues以上: keywords与关键字和 keywordvarvalues带有相应的变量值,可以传递给函数 g .像这样的东西,但有效:
julia> keywords = :operation, :format
(:operation,:format)

julia> keywordvarvalues = "times", "string"
("times","string")

julia> g(varvalues..., keywords... = keywordvarvalues...)
ERROR: MethodError: no method matching broadcast!...

我想我总是可以从 keywords 组成这个字符串和 keywordvarvalues :
expressionstring = """g(varvalues..., operation = "times", format = "string")"""

然后解析评估它,但这是一种糟糕的做法,不是吗?

最佳答案

这有效:

julia> keywords = :operation, :format
(:operation,:format)

julia> keywordvarvalues = 10, 20
(10,20)

julia> g(; operation=1, format=2) = (operation, format)
g (generic function with 1 method)

julia> g(; zip(keywords, keywordvarvalues)...)
(10,20)

关于julia - 如何通过元组将关键字和关键字变量值传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971122/

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