【问题标题】:Run only if string value is not set, is running every time仅在未设置字符串值时运行,每次都运行
【发布时间】:2017-10-25 03:39:26
【问题描述】:

仅当变量不是有效字符串(长度 > 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

【问题讨论】:

  • 您是否尝试在进入if 块后立即退出creep.memory.sourceid 等?至少其中一个值必须为真(不是falseundefinednull 或空字符串)。你可以easily verify this for yourself.
  • 您可以创建一个更简单的示例来深入了解这一点。您的特定游戏代码对任务并不重要。
  • @sheriffderek 他们的代码对我来说似乎很简单。他们缺少的是关于这三个值真正是什么的信息。
  • 我只是认为最好的结果 - 简化的东西是最好的 - 也适用于未来的其他人 - 像这样:jsfiddle.net/sheriffderek/d31mj4Lu - 另外,我们没有关于这个的上下文正在发生在一个函数中。
  • @sheriffderek 更简单可能更好,但他们的代码绝对足够简单。它发生在哪里并不重要。这是每个属性包含什么值以及使用哪些布尔运算符的问题。

标签: javascript screeps


【解决方案1】:

您正在使用 OR (||) 运算符进行检查。这意味着如果任何一个条件为真(在字符串的情况下为非空),则条件将运行。

你有这个条件:

if (creep.memory.sourceid || creep.memory.depositLoc || creep.memory.sourceType) {

这意味着如果设置了creep.memory.sourceid或者设置了creep.memory.depositLoc或者设置了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 (&&),如果 ALL 3条件为真。此外,您还必须检查该位置是否为空,如下所示:

if (creep.memory.sourceid && !creep.memory.depositLoc && creep.memory.sourceType) {
//    Notice the exclamation ^ up there

这样,如果有源 ID 并且如果 DON'T(!) 有存放位置并且如果有源类型,则代码块将运行。注意位置参数前的感叹号。这意味着这是价值的否定。

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 2019-04-30
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多