gpt4 book ai didi

julia - 转义符号集合

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

我试图转义一组符号,以便我获得一组变量,但遇到了问题。这是一个 MWE:

macro escape_all(x...)
:($(esc.(x))...)
end
x = 1
y = 2
z = 3
macroexpand(:(@escape_all x y z))

这返回
:(((:($(Expr(:escape, :x))), :($(Expr(:escape, :y))), :($(Expr(:escape, :z))))...,))

但我正在寻找它返回的只是
(x,y,z)

最佳答案

调用 Expr明确有效:

julia> macro escape_all(xs...)
Expr(:tuple, esc.(xs)...)
end
@escape_all (macro with 1 method)

julia> @macroexpand @escape_all x y z
:((x, y, z))

但是,您也可以在列表拼接(如 Lisp 中的 ,@,我猜)有意义的上下文中使用以下不加引号的语法:
julia> macro escape_list(xs...)
:([$(esc.(xs)...)])
end
@escape_list (macro with 1 method)

julia> macro escape_f(xs...)
:(f($(esc.(xs)...)))
end
@escape_f (macro with 1 method)

julia> @macroexpand @escape_list x y z
:([x, y, z])

julia> @macroexpand @escape_f x y z
:((Main.f)(x, y, z))

有趣的是,我从未见过 $(x...)在任何地方都可以谈论。我最近在阅读某人的代码时偶然发现了它。但它在当前的“最新”文档中被提及为 splatting interpolation .

关于julia - 转义符号集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49337902/

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