如何在 Nim 中将非纯函数标记为纯函数
How to mark non-pure function as pure in Nim
有没有办法将非纯函数 p
标记为纯函数?也许有一些语用?
我正在使用 p
进行调试,它不能在纯 func
过程中使用。
proc p(message: string): void = echo message
func purefn: void =
p "track"
purefn()
错误:
/usercode/in.nim(3, 6) Error: 'purefn' can have side effects
好吧,一开始您可以使用 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 所述,但我不建议这样做。
对于你的情况,你可以在 echo 内部使用 debugEcho
,它没有副作用。
除此之外,如果您在实际代码中未使用 echo
,则可以使用 {.cast(noSideEffect).}
编译指示:
proc p(message: string): void = echo message
func purefn: void =
{.cast(noSideEffect).}:
p "track"
purefn()
有没有办法将非纯函数 p
标记为纯函数?也许有一些语用?
我正在使用 p
进行调试,它不能在纯 func
过程中使用。
proc p(message: string): void = echo message
func purefn: void =
p "track"
purefn()
错误:
/usercode/in.nim(3, 6) Error: 'purefn' can have side effects
好吧,一开始您可以使用 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 所述,但我不建议这样做。
对于你的情况,你可以在 echo 内部使用 debugEcho
,它没有副作用。
除此之外,如果您在实际代码中未使用 echo
,则可以使用 {.cast(noSideEffect).}
编译指示:
proc p(message: string): void = echo message
func purefn: void =
{.cast(noSideEffect).}:
p "track"
purefn()