julia> let x = 7
@show x^2
@info "cube of $x" x^3
@warn "minus" -x maxlog=3
end
x ^ 2 = 49
┌ Info: cube of 7
└ x ^ 3 = 343
┌ Warning: minus
│ -x = -7
└ @ Main REPL[42]:4
# Compact show
macro showc(exs...)
blk = Expr(:block)
for ex in exs
push!(blk.args, :(println($(sprint(Base.show_unquoted,ex)*" = "),
repr(begin local value = $(esc(ex)) end, context = :compact=>true) * "\n")))
end
isempty(exs) || push!(blk.args, :value)
return blk
end
# Pretty show
macro showp(exs...)
blk = Expr(:block)
for ex in exs
push!(blk.args, :(println($(sprint(Base.show_unquoted,ex)*" = "),
repr(MIME("text/plain"), begin local value = $(esc(ex)) end, context = :limit=>true) * "\n")))
end
isempty(exs) || push!(blk.args, :value)
return blk
end
2条答案
按热度按时间eit6fx6z1#
有一些内置的宏可以做到这一点:
而第一个只是打印到stdout(例如参见
@macroexpand @show x
),宏@info
和@warn
使用日志记录模块,该模块具有各种更复杂的功能,包括抑制一些调用站点的打印细节,(正如@BallpointBen提到的)也可以直接从特殊的宏@__MODULE__
,@__FILE__
和@__LINE__
中获得。gk7wooem2#
@ mcabbet回答了这个问题(所以我把他的回答标记为接受),但我只是想添加几个片段来展示我想出的一些相关和方便的宏:
编辑:我已经根据@ mcabews在这个答案下面的评论中的建议更新了这些宏。
给定以下变量:
@showp d;
将显示:@showc d;
将显示:与内置的
@show d;
相比: