关于函数式编程:在 nim 中传递函数

passing functions in nim

我在 Nim(版本 0.10.2)中传递数学函数 (procs) 时遇到问题。

1
2
3
4
import math

var s1 = @[1.1, 1.2, 1.3, 1.4]
var s2 = map(s1, math.sqrt)

我得到错误

1
Error: 'sqrt' cannot be passed to a procvar

如果我为 sqrt 编写一个package函数,它就可以正常工作。

1
2
proc fxn(x: float): float = math.sqrt(x)
var s2 = map(s1, fxn)

我使用平方根和映射作为示例,但最终我会将 sqrt(和其他数学过程)传递给另一个过程。有没有办法在不编写package函数的情况下做到这一点?


有计划通过默认启用 procvar pragma 并为 C 导入的 procs 制作package procvar 来使这项工作默认工作:https://github.com/nim-lang/Nim/issues/2172