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

时间:2015-04-21 19:07:39

标签: julia

愚蠢的例子,我想做类似

的事情
X=println("hi"),

并获取

X="hi".

3 个答案:

答案 0 :(得分:3)

我认为海报想要访问可以从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)

返回

"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\"  |"

答案 1 :(得分:3)

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

s = string(args...)

给出了由print(args...)打印的字符串。此外,

s = repr(X)

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

答案 2 :(得分:2)

如果您使用的是格式化字符串,则可以使用@sprintf

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

julia> x
"hi"

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

虽然这是一个宏,但要小心