[英]How to implement map with pattern matching
我想编写一个map
的模式匹配实现,所以我这样写:
const map = (f, [x, ...xs]) => {
return (!x && !xs) ? [] : [f(x), ...map(f, xs)];
}
但是,编译器在递归调用中抱怨xs
参数:
类型“ any []”的参数不能分配给类型“ [any,... any []]”的参数。 类型“ any []”中缺少属性“ 0”
我也尝试过[f(x), ...map(f, [xs])]
,但这会产生堆栈溢出错误。
我究竟做错了什么?
如果我理解正确,我认为问题是通过&&对... xs参数的比较,这导致递归永远不会结束。 您只真正在乎下一个要处理的数组prop是否存在,其余的将被下一个递归捕获。
编译器错误是由于参数数组没有类型定义而引起的,而tsc从源代码中推论出一种:但是类型[any,... any []]太窄。 用:any []键入数组可以解决问题。
我希望这有帮助。
const map = (f, [x, ...rest]:any[]) => {
return (!x) ? [] : [f(x), ...map(f, rest)];
}
console.log(map(x=>x+10, [1,2,3]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.