使用 sprint 创建具有 IO 功能的字符串

可以使用 sprint 函数从使用 IO 对象的函数中创建字符串。例如,code_llvm 函数接受 IO 对象作为第一个参数。通常,它使用像

julia> code_llvm(STDOUT, *, (Int, Int))

define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
  %2 = mul i64 %1, %0
  ret i64 %2
}

假设我们希望输出为字符串。那我们就可以做到

julia> sprint(code_llvm, *, (Int, Int))
"\ndefine i64 @\"jlsys_*_46115\"(i64, i64) #0 {\ntop:\n  %2 = mul i64 %1, %0\n  ret i64 %2\n}\n"

julia> println(ans)

define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
  %2 = mul i64 %1, %0
  ret i64 %2
}

交互函数(如 code_llvm)的结果转换为字符串可用于自动分析,例如测试生成的代码是否可能已退化。

sprint 函数是一个高阶函数 ,它将在 IO 对象上运行的函数作为其第一个参数。在幕后,它在 RAM 中创建了一个 IOBuffer,调用给定的函数,并将缓冲区中的数据转换为 String 对象。