首页 > 解决方案 > 如何在 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

标签: nim-lang

解决方案


糖宏=>可以包元组参数,如以下示例(取自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)

推荐阅读