scala - 如何参数化 StringContext 使用的格式字符串?
问题描述
假设我有这样一行代码:
log.info(f"$name%-20s $amt%7.2f")
我想要的是使20
(的宽度name
)本身可以参数化。我怎样才能做到这一点?
如果我也想让7.2
宽度amt
也参数化怎么办。那可能吗?
[编辑:我希望将和之类的东西20
放在7.2
变量中,这样它们就不会在格式字符串中硬编码。]
我试过StringContext
直接使用,但似乎我不明白发生了什么宏扩展:
StringContext(...).f(...)
解决方案
你离事实不远:
val amt= 1234.1234d
val name = "James"
println(f"|$name%20s $amt%7.2f|")
产量:
| James 1234,12|
关于传递 20 和 7.2 作为参数:模板可以生成为:
val len = 20
val prec = 7.2
val template = s"$$name%${len}s $$amt%${prec}f"
产生:
$name%20 $amt%7.2f
但是字符串插值似乎并不是解决方案,因为它甚至被脱糖到 StringContext 中,它是在编译时完成的,然后
s"$template
yield $name%20s $amt%7.2f
。
我想我有这个用另一种语言工作
推荐阅读
- uikit - 如何在自定义结构或类中订阅 SwiftUI 中的状态属性更改
- gcc - 为沙丘安装空格钩子时出错
- node.js - DocumentDB 和 Lambda,连接错误
- python - 生成具有对角线边缘的数组的pythonic方法是什么?
- api - NIFI 在 InvokeHTTP 执行期间给出异常
- python - 从 pyinstaller python 冻结代码创建一个 pdf
- android - 如何在 Jetpack Compose 的 Surface 中显示图像?
- python - 在 python 3.8 中使用 smtp 服务器发送电子邮件的问题
- javascript - 在 VS Code 中指定 Jest 测试目录
- java - 如果 kafka 消费者指定的偏移量在 Broker 中不存在会怎样?