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...? 的相关文章

  • 埃拉托斯特尼筛法速度比较:Python 与 Julia

    所以我有一个用 Python 和 Julia 编写的 Eratosthenes 函数的小筛子 并且我正在比较运行时间 这是Python代码 import time def get primes n numbers set range n 1
  • 宏的问题

    HI 有人可以帮助我理解为什么 SQUARE x 的值为 49 吗 我正在使用 Visual C 6 0 define SQUARE X X X int main int argc char argv int y 5 printf d n
  • 这在 imacros javascript 中可能吗?尝试了很多方法都没有成功

    我已经处理了所有事情 但不幸的是它返回了 未定义 的数据 我尝试了许多不同的方法来从该网站获取数据 不成功 我在其他论坛上发布了这个问题 没有人能够解决这个问题来处理完整的数据提取 我需要像这样保存数据 91 228 53 28 8089
  • 使用 Intellij 调试 Scala 宏

    我有一个 sbt 项目 我运行 gen idea 来设置它以与 Intellij 12 4 一起使用 在一个项目中是我的主代码 另一个项目中有我的宏代码 当尝试通过以下测试文件调试我的宏时http docs scala lang org o
  • 无与伦比的括号宏怪异

    根据 C99 规则预处理以下 3 行的正确输出是什么 define y x x define x a y a x 1 x 2 顺便说一句 linux 下的 cpp 会产生错误消息 但我不明白为什么答案不简单 1 2 假设 cpp 是正确的而
  • Julia 中过时的软件包列表

    有没有办法列出 Julia 中所有过时的软件包 相当于pip3 list outdated在Python中 我做了几次搜索 1 https docs julialang org en v1 stdlib Pkg 2 https pkgdoc
  • 如何在 Julia 中创建一个数组?

    在许多机器学习用例中 您需要创建一个充满 1 且具有特定维度的数组 在Python中 我会使用np ones 2 1 Julia 中的模拟版本是什么 朱莉娅有一个内置的ones可以使用如下函数 julia gt ones 1 2 1 2 M
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 以 at (@) 符号为前缀的 Objective-C 宏的含义

    ReactiveCocoa 框架利用weakify and strongify宏 两者前面都有一个 符号 这是一个例子 从这个file https github com ReactiveCocoa ReactiveCocoa blob fd
  • 如何运行 Abaqus 宏 (.py) 脚本

    我是Python新手 我使用 Abaqus 宏管理器生成了一个宏 它是一个 py 脚本 我意识到该脚本仅在从 Abaqus 管理器运行时才有效 并且不能自行运行 请有人知道如何修改这个脚本 以便我可以在不使用 Abaqus 的情况下运行它
  • Jupyter (iPython) 笔记本中的 Latex 宏未由 github 渲染

    我的 Jupyter 笔记本 ipynb 中有一个 Markdown 单元 其中包含以下内容 newcommand paren 1 left 1 right paren beta 2 该文件位于 Github 存储库中 LaTex 宏应用程
  • 如何从字符串转换为数组?

    If s 1 2 3 4 5 我们如何从中获得一个整数数组 我想返回 5 个元素Array Int64 1 1 2 3 4 5 正如 isebarn 使用的那样 split s 对于将字符串拆分为单词非常有用 默认情况下按空格拆分 juli
  • 使用另一个宏(c 预处理器)生成宏的名称[重复]

    这个问题在这里已经有答案了 我可以使用宏生成函数的名称 该宏取自生成函数名称的 C 预处理器定义 https stackoverflow com questions 1253934 c pre processor defining for
  • 如何调用使用 Define 创建的 GNU make 宏?

    在我的 Makefile 中调用 GREP 的两种方式有什么区别吗 我有什么理由应该使用其中之一 两者似乎产生相同的结果 define GREP word 3 shell echo define FOO 0xfff00100 endef a
  • 朱莉娅在矩阵中查找(行,列)而不是索引

    在 Julia 中 您可以通过以下方式找到矩阵中元素的坐标 julia gt find x gt x 2 1 2 3 2 3 4 1 0 2 3 element Array Int64 1 2 4 9 这些值是正确的 但我更希望得到 row
  • 如何在宏中允许可选的尾随逗号?

    这是我想要的综合示例 macro rules define enum Name ident Variant ident gt pub enum Name None Variant define enum Foo A B 这段代码可以编译 但
  • 为什么 SBCL eval 函数会丢失它运行的宏?

    print x 打印出我想要评估的内容 但是 eval x 失败了 但如果我运行 x 它就可以了 我缺少什么 请告诉我为什么这不起作用 或者我是否在做一些愚蠢的事情 我正在尝试打印动态大小的表并设置 lambda 变量以最终计算表中每个单元
  • 宏内调用函数和宏的区别?

    我的难题是以下示例 defmacro macro1 x println x defn func1 x println x defmacro macro2 x macro1 x func1 x defmacro macro3 x func1
  • 避免函数内装箱/拆箱

    对于数字密集型代码 我编写了一个具有以下签名的函数 def update f Int Int Double gt Double Unit 然而 因为Function3不是专门的 每个应用程序f结果对 3 个参数和结果类型进行装箱 拆箱 我可
  • 对c中宏SQR的平方感到困惑[重复]

    这个问题在这里已经有答案了 这个问题是在模拟面试中问我的 真的很惊讶地发现尴尬的答案 考虑一个宏 define SQR x x x 示例1 SQR 2 prints 4 示例2 如果给出 SQR 1 1 则它不会求和 1 1 to 2反而

随机推荐