nim-lang - 如何在 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)
推荐阅读
- prolog - Prolog:使用附加约束安排开始时间
- javascript - 如何让 VS Code Intellisense 识别 JSDoc 注解?
- typescript - 使用打字稿获取羽毛聊天教程的错误消息“错误:必须向'users.get'方法提供一个ID”
- vue.js - Vue-CLI 和 Visual Studio Code 格式冲突
- authentication - 独立 Blazor WebAssembly 身份验证非常慢
- java - FlowLayout 使标签居中?
- apache-spark - 无法使用 spark 将结果写入 kafka 主题
- api - Invidious API 创建令牌
- android - 如何在 Android 10 中使用 XML 样式更改最左侧“主页”图标的颜色
- xamarin - 如何更改 Xamarin Forms 中控件的视觉状态?