Nim语言中如何用sugar库解包元组为函数参数?为何写法报错?
嘿,我来帮你搞定这两个关于Nim元组解包的问题!
问题1:如何用sugar库把元组解包作为函数参数?
sugar库给Nim的lambda表达式带来了更简洁的语法,结合模式匹配,我们有两种直观的方式来解包元组:
方式一:在lambda参数中直接解包
直接把元组的元素作为lambda的参数,编译器会自动匹配元组的结构:import sugar, sequtils echo @[(1, 1), (2, 2)].filter((x, y) => x > 1) # 输出 @[(2, 2)]方式二:在lambda体内解包
如果觉得参数位置的模式不够直观,也可以先接收整个元组参数,再用let语句在体内解包:import sugar, sequtils echo @[(1, 1), (2, 2)].filter(point => let (x, y) = point; x > 1) # 同样可行
问题2:能不能在函数参数中解包元组?
必须可以!Nim不管是普通proc还是lambda,都支持在参数位置直接解包元组——你之前的代码报错,只是因为多套了一层不必要的括号。
看你这段报错的代码:
echo @[(1, 1), (2, 2)].filter(((x, y)) => x > 1) # Error
问题就出在((x,y))这部分:外层的额外括号让编译器无法识别这是元组的解包模式,只要改成(x, y)就能正常运行了。
另外给你举个普通proc的例子,同样支持参数位置解包:
proc printProduct((a, b): tuple[int, int]) = echo a * b printProduct((4, 6)) # 输出 24
内容的提问来源于stack exchange,提问作者Alex Craft
相关产品推荐
相关产品推荐

