2016-07-10 4 views
1

Im Spiel Screeps habe ich einige Probleme mit den Rückgabetypen einiger der integrierten Funktionen. Nehmen Sie den folgenden Code ein:Screeps eingebaute Funktionen geben keine erwarteten Typen zurück

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); 

Sie würden erwarten, dass diese für alle Arrays und alle so sein Instanzen Array. Doch in einer Welt Spiel, das ich die folgenden Ergebnisse erhalten (mit myRoomName Satz auf den Namen eines Raumes Ich habe Zugang zu):

// 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 

Aber warten, wird es eigenartiger. Wenn ich laufen den gleichen Code in der Simulation (diesmal myRoomName ist 'sim'), erhalte ich folgende Ergebnisse:

// 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 

Warum nicht alle sind diese Funktionen Instanzen Array Rückkehr? Wie gibt es sogar verschiedene Versionen von Array in der Weltumgebung? Und gibt es eine Möglichkeit, die Ergebnisse in Instanzen von Array zu transformieren?

Antwort

1

Game.creeps gibt kein Array zurück, es gibt ein Objekt zurück, das sich wie ein Hash verhält, wobei der Kriechname der Schlüssel ist und der Creep der Wert ist. Dies ist in der API for Game.creeps dokumentiert. Wenn Sie dies in einem Array benötigen, können Sie das Objekt durchlaufen und die Einträge an ein Array anhängen.

Soweit wie creeps2 instanceof ist in der Simulation anders als das eigentliche Spiel, ist es schwer zu sagen. Array.isArray (Creeps2) scheint sich jedoch zwischen den beiden Umgebungen konsistent zu verhalten (gibt in beiden Fällen den Wert true zurück).

Verwandte Themen