You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Guile的format中以参数形式指定填充长度(如Bash printf)?

嘿,这个问题我刚好折腾过!在Guile的format里,完全能实现像Bash printf那样用传入参数动态指定填充长度,主要有两种实用方式,给你拆解清楚:

1. 用*直接引用后续参数作为宽度

这种写法和Bash的%*s逻辑几乎一致,*会自动取紧跟在格式说明符后面的参数作为填充宽度。举几个例子:

; 输出占5位的字符串(刚好长度匹配,直接输出)
(format #t "%*s\n" 5 "hello")

; 输出占10位的"hi",默认右对齐,前面补8个空格
(format #t "%*s\n" 10 "hi")

; 左对齐版本,"hi"后面补8个空格
(format #t "%-*s\n" 10 "hi")

2. 用v修饰符指定任意位置的参数作为宽度

如果你的宽度参数不是紧跟在格式说明符后面,或者需要复用某个参数作为宽度,就可以用v修饰符加上参数索引(注意Guile的参数索引是从1开始的)。比如:

; 用第2个参数(5)作为宽度,格式化第1个参数"hello"
(format #t "%v2s\n" "hello" 5)

; 用第3个参数(8)作为宽度,左对齐格式化第1个参数"foo"
(format #t "%-v3s\n" "foo" "bar" 8)

额外补充:动态指定精度

如果是处理数字精度或者字符串截断长度,同样可以用*或v来实现动态控制:

; 宽度8,精度3,格式化整数123(精度表示最小位数,不足补0)
(format #t "%*.*d\n" 8 3 123)

; 宽度10,截取字符串前3个字符,右对齐输出
(format #t "%*.*s\n" 10 3 "hello")

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:16:29