簡體   English   中英

如何通過模式匹配實現地圖

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM