所以,首先,重要的是要注意我正在为我没有设计的东西添加一个功能。我是JavaScript新手,我正在尝试编辑现有的Discord机器人。我发现实现目标的最简单方法是编辑生成随机数的根函数。原始代码的相关片段(取自dice-expression-evaluator模块https://github.com/dbkang/dice-expression-evaluator)如下:
Dice.prototype.roll = function () {
var rolls = [];
var sum = 0;
for (var i = 0; i < this.diceCount; i++) {
var roll = random.integer(1, this.sideCount) * this.coefficient;
rolls.push(roll);
sum += roll;
}
return {roll: sum, dice: rolls};
};
这个原始代码工作正常,但不包括我想要的功能(一种简单但冗长的白名单。)在该特定代码块中未定义的4个变量是相当不言自明的。我的代码版本(出于隐私原因略有编辑)如下:
Dice.prototype.roll = function () {
var rolls = [];
var sum = 0;
var range = this.whitelist(); //already tried it with () after whitelist
console.log(range.join(','));
for (var i = 0; i < this.diceCount; i++) {
var roll = random.integer(range[0], range[1]) * this.coefficient; //changed the 2 function arguments, but both are still integers
rolls.push(roll);
sum += roll;
}
return {roll: sum, dice: rolls};
};
Dice.prototype.whitelist = function () {
let user0 = "a";
let user1 = "b";
let user2 = "c";
let user3 = "d";
let user = message.author.id;
let die = this.sideCount;
console.log(user);
console.log(string(die));
if (user==user0) {
var min = Math.ceil(0.76 * die);
var max = die;
} else if (user==user1) {
var min = Math.ceil(0.76 * die);
var max = die;
} else if (user==user2) {
var min = 1;
var max = die;
} else if (user==user3) {
var min = 1;
var max = die;
} else {
var min = 1;
var max = die;
}
return [min, max];
};
message.author.id变量可用于启动整个函数链3范围的函数,但在MY版本的代码中,(即使在纠正了一些缺失的分号和类似的微小错误之后)一个骰子表达式在原始代码中功能完全生成“无效骰子表达式”错误。除了在random.integer调用中引入新变量和变量之外,我发现旧版本和新版本的Dice.prototype.roll之间没有功能差异。根据我的理解,我的白名单函数返回一个整数数组,这些整数正以一种完全合理的方式直接注入random.integer函数调用......我非常困惑。