Discard语句

Example:

  1. proc p(x, y: int): int =
  2. result = x + y
  3. discard p(3, 4) # 丢弃 `p` 的返回值

discard 语句评估其表达式的副作用并将表达式的结果值丢弃,其应在已知忽略此值不会导致问题时使用。

忽略过程的返回值而不使用丢弃语句将是静态错误。

如果调用的 proc/iterator 已使用 discardable “可丢弃”编译指示声明,则可以隐式忽略返回值:

  1. proc p(x, y: int): int {.discardable.} =
  2. result = x + y
  3. p(3, 4) # 当前有效

但是可丢弃编译指示不适用于模板,因为模板会替换掉 AST。 例如:

  1. {.push discardable .}
  2. template example(): string = "https://nim-lang.org"
  3. {.pop.}
  4. example()

此模板将解析为字符串字面值 “https://nim-lang.org“ ,但由于 {.discardable.} 不适用于字面值,编译器会出错。

discard 语句常用于空语句中:

  1. proc classify(s: string) =
  2. case s[0]
  3. of SymChars, '_': echo "an identifier"
  4. of '0'..'9': echo "a number"
  5. else: discard