我想重新分配一個匿名函式來添加它的功能。我基本上正在尋找以下功能。
let f1 = (x: number) => x 100;
// f1 = (x: number) => f1(x) 20; // becomes recursive -> stack overflow, not what I want
f1(3) // 123
我看到的兩個選項是 1. 包裝引數或 2. 以某種方式包裝結果。第一個選項似乎更容易,但我不確定如何完成它(或者如果我要求的是不可能的)。
編輯:顯然我的問題不夠清楚。我做了一個新的例子。
https://tsplay.dev/mpv3Mw
class Cat {
eat() {
const newCat = createFullCat(this);
return newCat;
}
drink() {
const newCat = createQuenchedCat(this);
return newCat;
}
sleep() {
const newCat = createRestedCat(this);
return newCat;
}
}
function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) {
let f1 = (cat: Cat) => cat.drink();
if (makeCatEat) {
f1 = (cat: Cat) => f1(cat).eat(); // Need different way to do this
}
if (makeCatSleep) {
f1 = (cat: Cat) => f1(cat).sleep(); // Need different way to do this
}
return f1;
}
如果可能,我想在不創建另一個變數的情況下執行此操作。
uj5u.com熱心網友回復:
首先,您為 分配了一個值(一個函式)f1:
let f1 = (x: number) => x 100;
然后,您為 分配了一個新值(另一個函式)f1:
f1 = (x: number) => f1(x) 20;
當您將新函式分配給它時,先前的函式不再有任何參考。在新函式中,對的參考是f1指自身,(因此在呼叫時它將永遠遞回)。
如果您想維護對第一個的參考以便它可以在第二個中使用,只需給第二個一個不同的名稱,如下所示:
TS游樂場
const f1 = (x: number) => x 100;
const f2 = (x: number) => f1(x) 20;
console.log(f2(3)); // 123
如果要對數字應用一系列轉換(但不想為程式中的每個轉換函式創建變數名),則可以使用函式陣列按順序處理數字,如下所示:
TS游樂場
type NumberTransform = (n: number) => number;
function transformNumber (n: number, transforms: NumberTransform[]): number {
let current = n;
for (const fn of transforms) current = fn(current);
return current;
}
const transforms: NumberTransform[] = [];
transforms.push(n => n 100);
transforms.push(n => n 20);
const result = transformNumber(3, transforms);
console.log(result); // 123
uj5u.com熱心網友回復:
我認為您需要的只是函式的兩個變數,而不是重新分配f1.
const f1 = (x: number) => x 100;
const f2 = (x: number) => f1(x) 20;
f2(3) // 123
基于更新的代碼示例,這是否可以完成您所談論的內容?
function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) {
if(makeCatSleep) {
return (cat: Cat) => cat.drink().sleep();
}
if(makeCatEat) {
return (cat: Cat) => cat.drink().eat();
}
//Assuming you always want the cat to drink
return (cat: Cat) => cat.drink();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392707.html
標籤:javascript 打字稿 函数式编程
上一篇:打字稿中的函式
下一篇:無法在打字稿中使用來自js的函式
