考慮要結合這兩種功能是如何的不同價值。然後「分解」這些差異以創建通用功能。在你的情況下,單個差異是在填充規則中使用 - 空格或隨機數字。
從理論上講,您可以添加某種布爾標誌或「類型」參數,然後在函數內部執行if
或switch
以選擇所需的行爲。這是一個可怕的設計。隨着添加更多選項,您的功能將會不斷增長和增長。這是一個答案採取的方法,不幸的是目前接受的答案。
相反,因爲在這種情況下差異在行爲,代表那些不同的行爲作爲要回調的函數。這就是功能所代表的 - 代表行爲!您的功能將有簽名pad(string, length, padFunc)
。這是一個更好的方法,是其他答案所採用的方法。但是,恕我直言,至少有一個這樣的答案設計得有點糟糕,它將padFunc
的含義超載爲函數或字符串。
一個現代化的,功能性的方法是寫一個創建基於規則的填充功能的高階函數,調用下面fn
:
function padder(fn) {
return function(string, length) {
while (string.length < length) string += fn(string, length);
};
}
(我傳遞string
和length
到填充功能,以防萬一它要使用他們的任何東西,或它可能忽視它們)
現在做軋染機與空白填補:。
const blankPadder = padder(() => ' ');
或者使軋染機可實現隨機數字填補:
const randomPadder = padder(() => Math.floor(Math.random() * 10));
鐵桿功能程序員可以寫這些爲:
const K = k =>() => k;
const random = n =>() => Math.floor(Math.random() * n);
const blankPadder = padder(K(' '));
const randomPadder = padder(random(10));
這裏K
是爲K combinator傳統名稱,函數返回一個總是返回相同值的函數。
當'padnum'將被調用,並且當'ws'將被調用? – brk
把它們合併成什麼? – EyuelDK
舉例說明你想要的結果 –