运行 仅当未设置字符串值时,每次都是 运行
Run only if string value is not set, is running every time
我正在尝试 运行 仅当变量不是有效字符串(长度 > 0,并且不是未定义)时的代码块。基于 this SO post,我认为我做得对,但每次都是 运行。我在这里做错了什么?
if (creep.memory.sourceid ||creep.memory.depositLoc||creep.memory.sourceType)
{
creep.memory.sourceid = getSourceMinWorkers(creep);
creep.memory.sourceType='energy';
creep.memory.depositLoc=getClosestDepositLoc(creep.memory.sourceid,creep.memory.sourceType);
console.log(creep.name," harvesting ",creep.memory.sourceType," at: ",creep.memory.sourceid," depositing at: ",creep.memory.depositLoc);
}
console.log的输出:
H1_1 harvesting energy at: 81a61f68f5eb4057223b05b2 depositing at: a7633d25d9058f616ab8a0f3
H1_1 harvesting energy at: 1649baad43f736c9fc13d2ad depositing at: a7633d25d9058f616ab8a0f3
您正在使用 OR (||
) 运算符进行检查。这意味着条件将 运行 如果任一条件为真(在字符串的情况下为非空)。
你有这个条件:
if (creep.memory.sourceid || creep.memory.depositLoc || creep.memory.sourceType) {
意思是如果设置了creep.memory.sourceid
OR creep.memory.depositLoc
OR creep.memory.sourceType
就会运行.
我看到您正在用这一行记录 3 个变量:
console.log(creep.name," harvesting ",creep.memory.sourceType," at: ",creep.memory.sourceid," depositing at: ",creep.memory.depositLoc);
每次块 运行 时都会记录数据,我看到 3 个参数是非空字符串,因此代码按预期工作。
根据您的代码,我认为仅当设置了 2 个参数但没有位置时才期望 运行 代码,因此您必须将 OR 运算符切换为 AND (&&
),如果所有 3 个条件都为真,它将通过。此外,您还必须检查该位置是否为空,如下所示:
if (creep.memory.sourceid && !creep.memory.depositLoc && creep.memory.sourceType) {
// Notice the exclamation ^ up there
这样代码块将是 运行 如果有一个源 ID 并且如果 DON'T(!
) 有一个存放位置并且如果有一个源类型。请注意位置参数前的感叹号。这意味着这是价值的否定。
我正在尝试 运行 仅当变量不是有效字符串(长度 > 0,并且不是未定义)时的代码块。基于 this SO post,我认为我做得对,但每次都是 运行。我在这里做错了什么?
if (creep.memory.sourceid ||creep.memory.depositLoc||creep.memory.sourceType)
{
creep.memory.sourceid = getSourceMinWorkers(creep);
creep.memory.sourceType='energy';
creep.memory.depositLoc=getClosestDepositLoc(creep.memory.sourceid,creep.memory.sourceType);
console.log(creep.name," harvesting ",creep.memory.sourceType," at: ",creep.memory.sourceid," depositing at: ",creep.memory.depositLoc);
}
console.log的输出:
H1_1 harvesting energy at: 81a61f68f5eb4057223b05b2 depositing at: a7633d25d9058f616ab8a0f3
H1_1 harvesting energy at: 1649baad43f736c9fc13d2ad depositing at: a7633d25d9058f616ab8a0f3
您正在使用 OR (||
) 运算符进行检查。这意味着条件将 运行 如果任一条件为真(在字符串的情况下为非空)。
你有这个条件:
if (creep.memory.sourceid || creep.memory.depositLoc || creep.memory.sourceType) {
意思是如果设置了creep.memory.sourceid
OR creep.memory.depositLoc
OR creep.memory.sourceType
就会运行.
我看到您正在用这一行记录 3 个变量:
console.log(creep.name," harvesting ",creep.memory.sourceType," at: ",creep.memory.sourceid," depositing at: ",creep.memory.depositLoc);
每次块 运行 时都会记录数据,我看到 3 个参数是非空字符串,因此代码按预期工作。
根据您的代码,我认为仅当设置了 2 个参数但没有位置时才期望 运行 代码,因此您必须将 OR 运算符切换为 AND (&&
),如果所有 3 个条件都为真,它将通过。此外,您还必须检查该位置是否为空,如下所示:
if (creep.memory.sourceid && !creep.memory.depositLoc && creep.memory.sourceType) {
// Notice the exclamation ^ up there
这样代码块将是 运行 如果有一个源 ID 并且如果 DON'T(!
) 有一个存放位置并且如果有一个源类型。请注意位置参数前的感叹号。这意味着这是价值的否定。