字符串类型

所有字符串字面值都是 string 类型。 Nim中的字符串与字符序列非常相似。 但是,Nim中的字符串都是以零结尾的并且具有长度字段。 可以用内置的 len 过程检索长度;长度永远不会计算终止零。

除非首先将字符串转换为 cstring 类型,否则无法访问终止零。 终止零确保可以在O(1)中完成此转换,无需任何分配。

字符串的赋值运算符始终复制字符串。 & 运算符拼接字符串。

大多数原生Nim类型支持使用特殊的 $ proc转换为字符串。

例如,当调用 echo proc时,会调用参数的内置字符串化操作:

  1. echo 3 # 为 `int` 调用 `$`

每当用户创建一个专门的对象时,该过程的实现提供了 string 表示。

  1. type
  2. Person = object
  3. name: string
  4. age: int
  5.  
  6. proc `$`(p: Person): string = # `$` 始终返回字符串
  7. result = p.name & " is " &
  8. $p.age & # we *need* the `$` in front of p.age which
  9. # is natively an integer to convert it to
  10. # a string
  11. " years old."

虽然也可以使用 $ p.name ,但字符串上的 $ 操作什么都不做。 请注意,我们不能依赖于从 intstring 的自动转换,就像 echo 过程一样。

字符串按字典顺序进行比较。 所有比较运算符都可用。 字符串可以像数组一样索引(下限为0)。 与数组不同,它们可用于case语句:

  1. case paramStr(i)
  2. of "-v": incl(options, optVerbose)
  3. of "-h", "-?": incl(options, optHelp)
  4. else: write(stdout, "invalid command line option!\n")

按照惯例,所有字符串都是UTF-8字符串,但不强制执行。 例如,从二进制文件读取字符串时,它们只是一个字节序列。 索引操作 s[i] 表示 s 的第i个 char ,而不是第i个 unichar 。 来自 unicode module 的迭代器 runes 可用于迭代所有Unicode字符。