Julia:如何在宏中使用 kwargs...?

2024-03-09

说我想要

@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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia:如何在宏中使用 kwargs...? 的相关文章

  • Julia:将数组数组转换为二维数组

    我有一个数组d包含一个浮点数组 julia gt d 99 element Array Array Float64 1 1 我正在尝试将其转换为二维数组 并且我成功地实现了我的目标 data Array Float64 length d l
  • 宏未产生所需的结果

    我是 C 新手 之前来自 Python 我对这部分代码感到困惑 include
  • 如何在 Julia 中进行两个变量数值积分?

    我可以使用 Julia 在 Julia 中进行单变量数值积分quadgk 一些简单的例子 julia gt f x cos x f generic function with 1 method julia gt quadgk f 0 pi
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 实现只有一个居民的类型的价值

    感谢 MilesSabin 的answer https stackoverflow com a 32157259 867671我可以编写类型级别的斐波那契序列 sealed trait Digit case object Zero exte
  • 为什么 SBCL eval 函数会丢失它运行的宏?

    print x 打印出我想要评估的内容 但是 eval x 失败了 但如果我运行 x 它就可以了 我缺少什么 请告诉我为什么这不起作用 或者我是否在做一些愚蠢的事情 我正在尝试打印动态大小的表并设置 lambda 变量以最终计算表中每个单元
  • 在 clojure 中,使用递归实现宏时如何进行代码模板化

    我正在尝试实现一个宏 以递归地将中缀列表转换为前缀列表 我遇到一个问题如下 this works defmacro recursive infix form list second form first form if not seq nt
  • 在我的 Julia 1.0.0 REPL 中,LOAD_PATH 返回意外结果

    我的 Julia REPL 帮助为 LOAD PATH 提供了以下内容 help gt LOAD PATH search LOAD PATH LOAD PATH An array of paths for using and import
  • 可扩展的宏定义

    灵感来自于评论区 https stackoverflow com questions 23879410 is it possible to extend a function lambda macro in scheme 23879575
  • 如何使用语法检查变量的度量(名义/序数/规模)?

    我想使用语法找到变量的度量 然后在 If 语句中使用它 使用语法可以吗 例如 如果我有两个变量a 标称 和b 序数 DO IF a is nominal END IF 您可以创建数据中所有名义变量的列表 在以下示例中 列表将存储在宏调用下
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • 如何在 Julia 中有效计算二次形式?

    我想计算一个二次形式 x Q y在朱莉娅 对于这种情况 计算此值的最有效方法是什么 没有假设 Q是对称的 x and y是相同的 x y Both Q是对称的并且x y 我知道朱莉娅有dot 但我想知道它是否比 BLAS 调用更快 现有的答
  • 标题的宏定义,放在哪里?

    定义头文件依赖的宏时 例如 FILE OFFSET BITS FUSE USE VERSION GNU SOURCE其中 放置它们的最佳位置在哪里 我考虑过的一些可能性包括 位于依赖于该文件中包含的标头公开的定义的任何源文件的顶部 紧接在相
  • 从 python 文件调用 Julia 函数

    我能够创建一个 docker 环境 然后按照这个线程我有一个用 Julia 编写的高性能函数 如何从 Python 中使用它 https stackoverflow com questions 64241264 i have a high
  • 如何创建一个扩展为“(x+y*240)*2”这样的表达式的 GNU GAS 宏?

    我正在使用 GAS 为 ARM Linux 构建一个程序 但我想做一些宏以使我的开发更加智能 然后我想知道 我怎样才能为此做一个宏 x y 240 2 were x and y are int 将像这样使用 mov r0 MACRO SHO
  • C++ 编译时类型注册技巧

    我有以下情况 假设我有一堆类型 函子 我想在编译期间注册 编译它们 最好是像 boost mpl vector 这样的东西 你知道有什么技巧可以做得很好吗 我的愿望是拥有实现函子类型和注册文件的 hpp 文件 其中宏将类型引入编译中 例如
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • 一次性的 lisp 宏,我的实现正确吗?

    我正在尝试从 Peter Seibel 的书 Practical Common Lisp 中学习 Lisp 在第 8 章 宏 定义你自己的 http www gigamonkeys com book macros defining your
  • C - 可变参数宏,它扩展为每个参数的一组宏调用

    我想要一个接受多个函数指针的宏调用 并且每个函数指针由第二个宏调用 该宏是函数声明 我想要表单上的两个宏 define FUNCTION DEF func extern int func void define FUNCTION DEFS

随机推荐