首页 > 解决方案 > 如何在 Nim 中将非纯函数标记为纯函数

问题描述

有没有办法将非纯函数标记为纯函数p?也许有一些杂注?

p用于调试,它不能在纯funcprocs 中使用。

操场

proc p(message: string): void = echo message

func purefn: void =
  p "track"
  
purefn()

错误:

/usercode/in.nim(3, 6) Error: 'purefn' can have side effects

标签: nim-lang

解决方案


好吧,一开始你可以使用它debugEcho来代替echo- 它没有副作用(它是专门为这样的用例而设计的)。

在其他情况下,您可以通过执行以下操作对编译器“撒谎”:

proc p(message: string) = 
  {.cast(noSideEffect).}:
    echo message

func purefn =
  p "track"
  
purefn()

https://nim-lang.org/docs/manual.html#pragmas-nosideeffect-pragma中所述,但我建议不要这样做。


推荐阅读