- 字符串类型
字符串类型
所有字符串字面值都是 string 类型。 Nim中的字符串与字符序列非常相似。 但是,Nim中的字符串都是以零结尾的并且具有长度字段。 可以用内置的 len 过程检索长度;长度永远不会计算终止零。
除非首先将字符串转换为 cstring 类型,否则无法访问终止零。 终止零确保可以在O(1)中完成此转换,无需任何分配。
字符串的赋值运算符始终复制字符串。 & 运算符拼接字符串。
大多数原生Nim类型支持使用特殊的 $ proc转换为字符串。
例如,当调用 echo proc时,会调用参数的内置字符串化操作:
- echo 3 # 为 `int` 调用 `$`
每当用户创建一个专门的对象时,该过程的实现提供了 string 表示。
- type
- Person = object
- name: string
- age: int
- proc `$`(p: Person): string = # `$` 始终返回字符串
- result = p.name & " is " &
- $p.age & # we *need* the `$` in front of p.age which
- # is natively an integer to convert it to
- # a string
- " years old."
虽然也可以使用 $ p.name ,但字符串上的 $ 操作什么都不做。 请注意,我们不能依赖于从 int 到 string 的自动转换,就像 echo 过程一样。
字符串按字典顺序进行比较。 所有比较运算符都可用。 字符串可以像数组一样索引(下限为0)。 与数组不同,它们可用于case语句:
- case paramStr(i)
- of "-v": incl(options, optVerbose)
- of "-h", "-?": incl(options, optHelp)
- else: write(stdout, "invalid command line option!\n")
按照惯例,所有字符串都是UTF-8字符串,但不强制执行。 例如,从二进制文件读取字符串时,它们只是一个字节序列。 索引操作 s[i] 表示 s 的第i个 char ,而不是第i个 unichar 。 来自 unicode module 的迭代器 runes 可用于迭代所有Unicode字符。