为什么在creep的教程中会执行Condition

Why is the Condition excectuted in the tutorial of screep

我在 Python 编程很多,刚开始玩 Screeps 和 Javascript。

在本教程中,此代码用于将 creep 移动到能源并收割它:

if(creep.store.getFreeCapacity() > 0) {
        var sources = creep.room.find(FIND_SOURCES);
        if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
            creep.moveTo(sources[0]);
        }
    }

而这个 creep 正是这样做的。然而,根据我的直觉,creep 不应该开始收割,因为它只是被告知要移动到那里。这是 Screeps 中对象定义方式的独特之处,还是我误解了 JavaScript。

我也试过在没有if语句的情况下将creep移动到source来检查它是否会自动收割,但没有做到。

收获代码也可以分开而不是放在一行中。也许这会让你明白。

if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
    creep.moveTo(sources[0]);
}

这部分告诉 creep 去收割,然后才评估收割的结果。 documentation 表示方法 returns 一个可以检查的常量结果。

把这段代码稍微拆开一点,它看起来像这样:

let harvestResult = creep.harvest(sources[0]);
if (harvestResult == ERR_NOT_IN_RANGE) {
    creep.moveTo(sources[0]);
}

现在更清楚了,方法总是在之后调用和求值。