gpt4 book ai didi

macros - Julia:如何在宏中使用 kwargs?

转载 作者:行者123 更新时间:2023-12-04 02:31:13 24 4
gpt4 key购买 nike

说我要

@fn a :b :c sort=true

扩展到

gn(a, :b, :c, sort=true)

目前,我把它写成

macro fn(x, args..., kwargs...)
esc(:(gn($x, $(args...), $(kwargs...))))
end

这似乎不起作用。

如何扩展 kwargs... 是一个宏?

最佳答案

在任何情况下,您都必须用冒号分隔 args 和 kwargs,但是:

julia> macro fn(x, args...; kwargs...)
esc(:(gn($x, $(args...), $(kwargs...))))
end
ERROR: syntax: macros cannot accept keyword arguments
Stacktrace:
[1] top-level scope at REPL[2]:1

但是,您当然可以自行解析“假关键字参数”。它们只是作为赋值语句传递:

julia> dump(:(@fn a :b :c sort=true))
Expr
head: Symbol macrocall
args: Array{Any}((6,))
1: Symbol @fn
2: LineNumberNode
line: Int64 1
file: Symbol REPL[5]
3: Symbol a
4: QuoteNode
value: Symbol b
5: QuoteNode
value: Symbol c
6: Expr
head: Symbol =
args: Array{Any}((2,))
1: Symbol sort
2: Bool true

关于macros - Julia:如何在宏中使用 kwargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64112110/

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