gpt4 book ai didi

nim-lang - 如何在 Nim 中的格式化字符串中使用表达式?

转载 作者:行者123 更新时间:2023-12-03 20:04:00 24 4
gpt4 key购买 nike

if如果在 fmt 内使用,则表达式不起作用字符串。
为什么,以及如何使它工作?

import strformat

let v = if true: 1 else: 2 # <= Works
echo fmt"{v}"

echo fmt"{if true: 1 else: 2}" # <= Error

最佳答案

为什么?
因为 fmt用途 :将表达式的值与格式说明符分开(参见 docsimplementation )该行echo fmt"{if true: 1 else: 2}"被宏扩展为

var temp = newStringOfCap(educatedCapGuess)
temp.formatValue if true, " 1 else: 2"
temp
这显然不能编译。
如何?
更新
目前(2021 年 4 月)在 devel 分支中有一项增强功能,允许在格式化字符串中使用任何表达式。对于提到的特定情况,您需要用括号将表达式括起来:
echo fmt"{(if true: 1 else: 2)}"
新的增强功能还允许在表达式中使用大括号(转义它们)。
看:
  • RFC:https://github.com/nim-lang/RFCs/issues/366
  • first和一个 second添加实现的 PR
  • 近期论坛讨论:https://forum.nim-lang.org/t/7052

  • 此增强功能将在下一个稳定版本(可能是 1.6)中面向公众发布。
    旧内容
    我想这可以看作是 fmt 的限制。我不认为目前有一种方法可以使用 : 的表达式在 fmt它不充当特定格式。
    解决此问题的一种方法是提供额外的 formatSpecifierSeparator关键字参数以更改默认值 :并能够执行以下操作: echo "{if true: 1 else: 2}".fmt('|')另一种方法是更改​​ strformatImpl 的实现并确保 : 之前的部分在解释之前实际编译 :作为 formatSpecifier 分隔符。
    这两种方式都意味着 nim-lang 代码中的 PR,如果被接受和合并,将在下一个版本或开发后可用。

    关于nim-lang - 如何在 Nim 中的格式化字符串中使用表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63602254/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com