【问题标题】:Screeps built-in functions don't return expected typesScreeps 内置函数不返回预期类型
【发布时间】:2016-07-14 00:47:50
【问题描述】:

在游戏Screeps 中,我遇到了一些内置函数的返回类型的问题。取以下代码:

var creeps1 = Game.creeps
var room = Game.rooms[myRoomName];
var creeps2 = room.find(FIND_CREEPS);

console.log(creeps1.constructor.name);
console.log(creeps1 instanceof Array);

console.log(creeps2.constructor.name);
console.log(creeps2 instanceof Array);

console.log([].constructor.name);
console.log([] instanceof Array);

您希望这些都是数组,因此都是Array 的实例。然而,在世界游戏中,我得到以下结果(myRoomName 设置为我可以访问的房间的名称):

// Results in world
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true

但是等等,它变得更奇怪了。当我在模拟中运行相同的代码时(这次myRoomName'sim'),我得到以下结果:

// Results in simulation
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true
[1:11:11 AM] Array
[1:11:11 AM] true

为什么不是所有这些函数都返回Array 的实例?世界环境中怎么会有不同版本的Array?有没有办法将结果转换为Array 的实例?

【问题讨论】:

    标签: javascript screeps


    【解决方案1】:

    Game.creeps 不返回一个数组,它返回一个行为为哈希的对象,其中creep 名称是键,creep 是值。这记录在API for Game.creeps 中。如果您需要将其放在数组中,您可以遍历对象并将条目附加到数组中。

    至于为什么crees2 instanceof 在模拟和实际游戏中的不同,很难说。但是,Array.isArray(creeps2) 似乎在两种环境之间表现一致(在两种情况下都返回 true)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2017-07-15
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多