考虑要结合这两种功能是如何的不同价值。然后“分解”这些差异以创建通用功能。在你的情况下,单个差异是在填充规则中使用 - 空格或随机数字。
从理论上讲,您可以添加某种布尔标志或“类型”参数,然后在函数内部执行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
举例说明你想要的结果 –