julia@printf更改我的变量
我发现很难用Julia设置数字格式:julia@printf更改我的变量,julia,Julia,我发现很难用Julia设置数字格式: b = 1.111111 bb = @printf "test : %5.2f" b bb test : 1.11 那很好 using PyPlot annotate(@printf "test : %5.2f" b, xy=[1;1]) test : type: non-boolean (Array{Bool,1}) used in boolean context while loading In[16], in expression star
b = 1.111111
bb = @printf "test : %5.2f" b
bb
test : 1.11
那很好
using PyPlot
annotate(@printf "test : %5.2f" b, xy=[1;1])
test :
type: non-boolean (Array{Bool,1}) used in boolean context
while loading In[16], in expression starting on line 2
我不明白,因为我希望@printf的结果是字符串。如果有人能解释我该怎么做
"test : %5.2f" % b
在Python中
最后,这里是一件奇怪的事情:
b
1
b已被转换为Int。你会称之为bug吗
我将Julia 0.3.2与Jupyter 3.1一起使用,宏解析(特别是在函数调用的上下文中)有点挑剔。你可以简单地引用一下Julia是如何解析的:
julia> :(annotate(@printf "test : %5.2f" b, xy=[1;1]))
:(annotate(@printf "test : %5.2f" (b,xy) = [1,1]))
如您所见,宏比函数参数“更贪婪”。整个b,xy=[1;1]
部分作为@printf
宏的唯一参数。这就解释了为什么b
的值会发生变化,=
的上下文已从表示关键字参数变为一般元组赋值
在更复杂的表达式中使用宏时,我强烈建议对宏使用类似函数的语法,如下所示:
annotate(@sprintf("test : %5.2f", b), xy=[1;1])
最后,请注意,我已将
@printf
更改为@sprintf
。前者返回nothing
并简单地输出值,而后者返回一个字符串,您可以将其传递给函数。感谢您的回答和了解Julia如何解析宏的技巧。