微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么相同的字符串在 Nim 中不相等?

如何解决为什么相同的字符串在 Nim 中不相等?

JSON 包生成的字符串不等于相同的字符串,为什么?

下面代码中的最后一个相等性检查是错误的,为什么? playground

import strformat,json

type Price = tuple[price: float,currency: string]

func `%`*(v: Price): JsonNode = %(fmt"{v.price} {v.currency}")

let v: Price = (214.05,"USD")
let s: string = (%(v)).pretty

echo s                  # => "214.05 USD"
echo s == "214.05 USD"  # => false,why?

解决方法

echo proc 有时在表示字符串方面可能具有欺骗性,因此我更喜欢添加 repr proc,它确保以更清晰的方式表示字符串(和其他对象)。查看我在示例中添加以下几行时得到的输出,表示比较的双方:

echo repr(s)
echo repr("214.05 USD")
==>
0x105f5c0b8"\"214.05 USD\""
0x105f1cf70"214.05 USD"

通过这种表示我们可以看到字符串实际上是不相等的。您的 % proc 将 Price 元组的内容格式化为空格分隔的字符串节点,JSON pretty proc 将该字符串节点转换为其 JSON 表示形式,其中包括双引号。因此,为了使最后的比较相等,我们需要这样写:

echo s == "\"214.05 USD\""

另一种可能性是编写访问 JsonNode.str 变体字段的比较,以避免涉及恶作剧的 pretty

echo (%(v)).str == "214.05 USD"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。