gpt4 book ai didi

用于动态编码变量的 Julia 宏,例如创建一组数据帧

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

我正在尝试学习宏,所以我认为一个简单的步骤是编写一个基于数据帧对变量进行编码的宏。我可以通过 dfn 手动设置 df1,但我不想这样做。

例如:

macro mac(i)
quote
df$i = DataFrame(CSV.File("~/dev/book$i.csv"))
end
end

如果我测试,输入 2,但出来的只是一些奇怪的字符串。 . .

@mac(2)

df2
>> #416#$

最佳答案

宏中的变量被“随机化”以不与宏扩展所在代码中的变量发生冲突,请参阅关于 metaprogramming 的部分尤其是关于 macro hygiene 的部分. @macroexpand是一个非常有用的工具,可以让您查看扩展代码并使其更易于调试。

在这种情况下,您需要 "escape"符号。

julia> macro mac(i)
quote
df$i = DataFrame(CSV.File("book$i.csv"))
end
end
@mac (macro with 1 method)

julia> macro mac2(i)
quote
$(esc(Symbol("df$i"))) = DataFrame(CSV.File("book$i.csv"))
end
end
@mac2 (macro with 1 method)

julia> @macroexpand @mac 1
quote
#= REPL[10]:3 =#
var"#4#\$"(var"#5#df", var"#6#i") = begin
#= REPL[10]:3 =#
Main.DataFrame((Main.CSV).File("book$(var"#6#i").csv"))
end
end

julia> @macroexpand @mac2 2
quote
#= REPL[11]:3 =#
df2 = Main.DataFrame((Main.CSV).File("book$(Main.i).csv"))
end

关于用于动态编码变量的 Julia 宏,例如创建一组数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67449168/

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