You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Julia宏中获取函数名:带关键字参数的函数为何显示异常?

关键字参数函数中宏获取函数名异常的问题

我编写了一个宏,通过存储在字典中的错误消息模板简化代码,该宏会自动插入抛出错误的函数名(参考discourse及@__FUNCTION__相关内容)。

exception = Dict(:foo => ("bar ~", ArgumentError))
macro ⛔(id)
    msg, type = exception[id]
    quote
        msg = replace($msg, "~" => StackTraces.stacktrace()[1].func)
        throw($type(msg))
    end 
end

在使用位置参数的函数f中运行正常:

f(x, p) = p < 5 ? x : @⛔ foo
f(1, 10)
#> ERROR: ArgumentError: bar f

但在使用关键字参数的函数g中,函数名显示为#g#N(N为会话中第N个求值表达式,重定义g会递增该数字):

g(x; p = 3) = p < 5 ? x : @⛔ foo
g(1, p = 10)
#> ERROR: ArgumentError: bar #g#N

我使用@macroexpand对比两者生成的代码未发现差异,困惑:函数g与f相比究竟有何不同?

内容的提问来源于stack exchange,提问作者Donald Seinen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:55:21