[英]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.