2015-09-30 42 views
6

Weź ten kod:Czy Haxe przekazuje parametry przez odwołanie lub czy tworzy kopię?

function createGUIHud():Void 
{ 
    this.screen.gameHud = new NormalGameHud(10, 0, this.screen.getTextureAtlas()); 
    this.screen.gameHud.x = FlxG.width - (this.screen.gameHud.width + GameSize.getPositionByPlatform(10)); 
    this.screen.gameHud.y = GameSize.getPositionByPlatform(10); 
} 

// NormalGameHud.hx 

/** 
* @param lives 
* @param corn 
* @param textureAtlas 
*/ 
public function new(lives:Int = 10, corn:Int = 0, textureAtlas:SparrowData) 
{ 
    super(0, 0, 30); 
    this.lives = lives; 
    this.cornCount = corn; 
    this.textureAtlas = textureAtlas; 

    this.createScoreboard(); 
    this.createLivesCount(); 
    this.createCornCounter(); 
} 

robi „textureAtlas” przejdzie przez odniesienie, czy też kopiowane?

http://api.haxeflixel.com/flixel/util/loaders/SparrowData.html

wiem PHP obiektów przechodzi przez odniesienie, a takie rzeczy jak tablice kopiowane ile nie zaznaczono inaczej (z prefiksem &). Czy to samo dotyczy Haxe?

Dziękuję.

Odpowiedz

5

AFAIK, Primitives (Int, Float, Bool, ...) są przekazywane przez wartość. Cała reszta jest przekazywana przez odniesienie.

+5

"Prymitywy" można uznać za przekazane również jako odniesienie. Po prostu są niezmienne, co oznacza, że ​​wartość ref/value nie ma nawet znaczenia. –

+0

Właściwie to powiedziałbym, że wszystko w Haxe jest przekazywane przez wartość, gdzie podstawowe typy (Bool, Int, Float) są kopiowane bezpośrednio tam, gdzie obiekty i inne typy mają swoje referencje skopiowane. Bool, Int, Float i String są zawsze niezmienne i porównywane pod względem wartości. Niezależnie od tego, czy Strings są kopiowane, czy też ich referencje zostały skopiowane, myślę, że są one specyficzne dla celu, ale ponieważ są niezmienne, tak naprawdę nie ma to znaczenia. –

Powiązane problemy