在Julia函数中调用@printf宏出现LoadError问题求助
Julia中@printf宏未定义的解决方法及代码修正
核心问题解决:@printf未定义
你虽然添加了using Printf,但Julia的@printf宏属于Printf模块的导出项,默认不会自动导入到当前全局命名空间。解决方法有两种:
- 调用宏时加上模块前缀:
Printf.@printf(...) - 显式导入宏到当前命名空间:
import Printf: @printf(可放在using Printf之后,或直接替换using Printf)
代码中的其他错误修复
你的mysqrt函数里还有一个未定义变量的错误:while循环中使用了dist > tol,但代码里定义的变量是Δ,会触发UndefVarError: dist not defined,需要将条件改成Δ > tol。
修正后的完整代码
function mysqrt_step(a,x) 0.5*(a + a/x) end function mysqrt(a,x; tol = 1e-8) iters = 0 x_prime = 0.0 Δ = 1000.0 while Δ > tol # 修复未定义的dist变量,改为Δ x_prime = mysqrt_step(a,x) Δ = abs(x - x_prime) x = x_prime iters += 1 end return(x,iters) end using Printf import Printf: @printf # 显式导入@printf宏到当前命名空间 function sqrt_table() @printf("%2s %10s %10s %10s \n", "a", "mysqrt", "sqrt", "Iterations") for a in 2:10 tmp = mysqrt(a,a^2) @printf("%2d %10f %10f %10d \n", a, tmp[1], sqrt(a), tmp[2]) end end
验证执行效果
在VSCode的REPL中执行sqrt_table(),会正常输出结果表格:
a mysqrt sqrt Iterations 2 1.414214 1.414214 17 3 1.732051 1.732051 20 4 2.000000 2.000000 22 5 2.236068 2.236068 23 6 2.449490 2.449490 24 7 2.645751 2.645751 25 8 2.828427 2.828427 26 9 3.000000 3.000000 27 10 3.162278 3.162278 28
内容的提问来源于stack exchange,提问作者zlqs1985
相关产品推荐
相关产品推荐

