如何在 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)
是否可以解包参数中的元组?
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)