Screeps 内置函数没有 return 预期的类型
Screeps built-in functions don't return expected types
在游戏 Screeps 中,某些内置函数的 return 类型存在一些问题。取以下代码:
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
为什么所有这些函数 return 都不是 Array
的实例?世界环境中怎么会有不同版本的Array
?有没有办法将结果转换为 Array
的实例?
Game.creeps 不是 return 数组,它 return 是一个对象,表现为散列,其中 creep 名称是键,creep 是值。这记录在 API for Game.creeps 中。如果您需要将它放在数组中,您可以遍历对象并将条目附加到数组。
至于为什么 creep2 instanceof 在模拟和实际游戏中不同,很难说。然而,Array.isArray(creeps2) 似乎在两种环境之间表现一致(return在两种情况下都是正确的)。
在游戏 Screeps 中,某些内置函数的 return 类型存在一些问题。取以下代码:
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
为什么所有这些函数 return 都不是 Array
的实例?世界环境中怎么会有不同版本的Array
?有没有办法将结果转换为 Array
的实例?
Game.creeps 不是 return 数组,它 return 是一个对象,表现为散列,其中 creep 名称是键,creep 是值。这记录在 API for Game.creeps 中。如果您需要将它放在数组中,您可以遍历对象并将条目附加到数组。
至于为什么 creep2 instanceof 在模拟和实际游戏中不同,很难说。然而,Array.isArray(creeps2) 似乎在两种环境之间表现一致(return在两种情况下都是正确的)。