如何在 Nim 中用糖解压参数中的元组?

How to unpack tuple in arguments with sugar in Nim?

是否可以解包参数中的元组?

import sugar, sequtils

echo @[(1, 1), (2, 2)].filter((point) => point[0] > 1) # Works  
echo @[(1, 1), (2, 2)].filter(((x, y)) => x > 1)       # Error

糖宏=>可以某种解压元组参数,如下例(取自docs)所示:

proc passTwoAndTwo(f: (int, int) -> bool): bool =
  f(2, 2)

echo passTwoAndTwo((x, y) => x > 1) # true

有点,因为它实际上将 x 和 y 视为两个不同的参数,而不是元组的元素。

其实问题出在=>不支持的语法((x, y)) => x > 1(你可以通过运行在前面加上discard来检查) .

我不确定要求 => 支持传递元组的特殊情况有多容易或合理。

对于您的用例,一旦您定义了 Point 类型,以下两行就可以替代:

echo @[(1, 1).Point, (2, 2)].filter(point => point.x > 1)
echo @[(1, 1), (2, 2)].filterIt(it.Point.x > 1)