Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible bug with function binding and getters in Haxe?

Tags:

haxe

Just ran into this issue in Haxe and was wondering if this was a bug or if it was done on purpose...

I was binding a function that prints a timestamp. The timestamp in this case was a getter in my globals class. I expected that if I were to wait a few seconds and then invoke the bound function, it would use the value of the getter at the time the function was bound. That was not the case. Instead, it seems to be calling the getter to get the current value each time.

I checked to see if this happens if I switched from using a getter to a normal function call to fetch my timestamp as my parameter. The latter works as expected.

function printTime(time:Int):Void {
    trace("The time is: " + time);
}

var p:Void->Void = printTime.bind(Globals.timestampgetter); 
var p2:Void->Void = printTime.bind(Global.timestampfunc());
// wait 5 seconds
p(); // prints CURRENT timestamp, i.e. adds the 5 seconds that passed
p2(); // prints time at which printTime.bind was called

EDIT: Forgot to mention... I'm using Haxe 3.1.3 and OpenFL 3.0.0 beta, compiling to a Flash target.

like image 356
Esrix Avatar asked Mar 16 '23 15:03

Esrix


1 Answers

I tried your code and it works as expected for me. The values are set at bind time and do not change even if you delay the calls of p and p2.

Here is the code I tested:

class Test {
    static function main() {
        function printTime(time:Float):Void {
            trace("The time is: " + time);
        }

        var p = printTime.bind(Test.timestampgetter); 
        var p2 = printTime.bind(Test.timestampfunc());
        p();
        p2();

        haxe.Timer.delay(function() {
            p();
            p2();
        }, 1000);
    }

    public static var timestampgetter(get, null) : Float;

    static function timestampfunc() return Date.now().getTime();
    static function get_timestampgetter() return Date.now().getTime();
}

You can test it yourself here: http://try.haxe.org/#C85Ce

like image 146
Franco Ponticelli Avatar answered Apr 26 '23 15:04

Franco Ponticelli