首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia的@assert不再计算assert message?

Julia的@assert不再计算assert message?
EN

Stack Overflow用户
提问于 2014-04-19 16:41:20
回答 1查看 1.8K关注 0票数 2

我的Julia代码调用了assert函数(或者宏,我不确定)。当断言被触发时,它在Julia v0.1.2下运行,计算第二个参数(字符串),并正确地打印出计算过的实例。在下面的示例中,v0.1.2将打印"Hello world“。

升级到v0.2.1后,不会计算第二个参数。取而代之的是打印出一条不清楚的信息框架:

代码语言:javascript
复制
julia> a="world" ;  @assert(1==0,"hello $a")
ERROR: assertion failed: :($(Expr(:string, "hello ", :a)))
 in error at error.jl:21

julia> a="world" ;  assert(1==0,"hello $a")
ERROR: assertion failed: y
 in assert at deprecated.jl:21

有没有人能解释一下这种新行为?有没有办法通过内置断言恢复旧的行为,或者我实现自己的断言函数会更好?

EN

回答 1

Stack Overflow用户

发布于 2014-04-19 21:57:11

现在,宏会在编译时对assert文本进行字符串化,这主要是出于性能方面的考虑。当然,您也可以添加并使用自己的宏:

代码语言:javascript
复制
julia> macro assert2(ex, text)
           :($ex ? nothing : error("Assertion failed: ", $(text)))
       end

julia> @assert2(1==2, "hello $a")
ERROR: Assertion failed: hello abc
 in error at error.jl:22
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23167868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档