我有一个攻击(选择:数字,敌人:怪物)
方法,必须根据选择在3种不同的攻击之间进行选择。
tackle(enemy: Monster){}
bite(enemy: Monster){}
laser(enemy: Monster){}
但是,每种方法(例如敌人死亡)的含义与我当前实现它的方式是三倍的
if(choice == 1){
bite(enemy);
*
*
lines of bitting implications
*
*
*
}
else if(choice == 2){
*
*
*
}
else {
*
*
*
}
我想知道是否可以创建一个 attack_methods[3]
来让我简单地实现
attack_methods[1] = tackle(enemy: Monster){};
attack_methods[2] = bite(enemy: Monster){};
attack_methods[3] = laser(enemy: Monster){};
然后
attack(choice: number, enemy: Monster, attack_methods[]: GodKnows){
attack_methods[choice](Monster);
*
*
*
implications of choice
*
*
*
}
以及,如果可能的话,实现它的正确方法
(我以前用c语言编程,我对typescript还不太了解)
最佳答案
实现不同实现的一种简洁方法是拥有一个选择映射和一个根据选择执行的函数。
为了可读性,我将choice
的类型从number
更改为string
。
像这样定义所有选择:
const CHOICE_TACKLE: string = "TACKLE";
const CHOICE_BITE: string = "BITE";
const CHOICE_LASER: string = "LASER";
像这样定义函数:
const tackle = (enemy: Monstor) => {
/** Tackle implementation */
}
const bite = (enemy: Monstor) => {
/** Bite implementation */
}
const laser = (enemy: Monstor) => {
/** Laset implementation */
}
您可以将它们放在不同的文件中,也可以将它们导入到一个文件中。
一旦您完成了所有选择并实现到位,您就可以像这样定义 map :
const ATTACK_IMPLEMENTATIONS = {
[CHOICE_TACKLE]: tackle,
[CHOICE_BITE]: bite,
[CHOICE_LASER]: laser
}
然后你的附加函数将是:
const attack = (choice: string, enemy: IMonstor) => {
const attackFunction = ATTACK_IMPLEMENTATIONS[choice];
if (!attackFunction) {
console.error(`No attach function implementation found for choice "${choice}"`);
return;
}
attackFunction(enemy);
}
<小时/>
请注意,这是使代码简洁的简单方法。对于更高级的用例,您可能需要查看 strategy pattern
关于javascript - Typescript 中的函数向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946893/