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

标签 macros julia

说我要

@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/

相关文章:

objective-c - 不同版本的 Mac OS X 之间的代码分开吗?

c++ - 为什么 gcc 在递归扩展宏时中断

c - 为什么在 foreach 宏中使用 "(array) + count"?

python - 如果 f-string 像 Julia 中可用的字符串格式?

import - 在 Julia 中创建共享模块的推荐方法是什么?

machine-learning - Julia 创建具有匹配参数的函数数组以在循环中执行

macros - 在运行时处理内部变量和数据结构的 LISP 宏

function - 是否有任何宏不能表示为函数?

julia - julia 是否具有与 python 中的 hstack 等效的功能?

optimization - 使用 Inf 作为界限时,Optim.jl 单变量有界优化会混淆输出