在 julia 中,如何将表达式的输出分配给新变量?

In julia, how do I assign the output of an expression to a new variable?

愚蠢的例子,我想做类似的事情

X=println("hi"),

并获得

X="hi".

我认为张贴者想要访问您可以从 println 获得的漂亮摘要格式。将其作为字符串访问的一种方法是使用 print 写入缓冲区,然后将其作为字符串读回。可能还有更简单的方法。

using DataFrames
data = DataFrame()
data[:turtle] = ["Suzy", "Suzy", "Bob", "Batman",  "Batman", "Bob", "Adam"]
data[:mealType] = ["bug", "worm", "worm", "bug",  "worm", "worm", "stick"]

stream = IOBuffer()
println(data)
print(stream, data)
yourString = takebuf_string(stream)

returns

"7x2 DataFrame\n| Row | turtle   | mealType |\n|-----|----------|----------|\n| 1   | \"Suzy\"   | \"bug\"    |\n| 2   | \"Suzy\"   | \"worm\"   |\n| 3   | \"Bob\"    | \"worm\"   |\n| 4   | \"Batman\" | \"bug\"    |\n| 5   | \"Batman\" | \"worm\"   |\n| 6   | \"Bob\"    | \"worm\"   |\n| 7   | \"Adam\"   | \"stick\"  |"

如果您需要格式化字符串,您可以使用 @sprintf.

julia> x = @sprintf("%s", "hi")
"hi"

julia> x
"hi"

julia> x = @sprintf("%d/%d", 3, 4)
"3/4"

这是一个宏,所以要小心

一般的解决方案是使用上面@ARM 描述的IOBuffertakebuf_string。如果足以捕获 print 的输出,则

s = string(args...)

给出本应由 print(args...) 打印的字符串。还有,

s = repr(X)

给出本应由 showall(X) 打印的字符串。两者都是在内部使用 IOBuffertakebuf_string 实现的。