Could http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script_handle.html be clarified regarding what happens when comparing two handles with == and != ? Is that functionally equivalent to is and !is?
Thanks
Could http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script_handle.html be clarified regarding what happens when comparing two handles with == and != ? Is that functionally equivalent to is and !is?
Thanks
Here's a brief explanation of the differences:
Foo@ a, b;
Foo c;
//These compare the value of the referenced instances, typically via opCmp()
a == b;
a == c;
c == b;
//These compare handles (pointers) for equality
@a == @b;
a is b;
a is c;
I'll update the manual to clarify how == and != works with handles, but the gist of it is that unless you prefix the expression with @ the comparison will be done by value on the object the handle refers to (i.e. call the opEquals method). (it is only necessary to prefix one of the expressions with @, and the compiler will automatically understand that the other must work on the address).
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
Thanks for the feedback, that's very helpful.
Similar questions regarding handles and dictionaries:
class Foo
{
Foo() { print("Foo"); }
Foo(const Foo &in other) { print("Foo(const Foo& other)"); }
Foo@ opAssign(const Foo &in other ) { print("opAssign(const Foo& other)"); return this; }
~Foo() { print("~Foo"); }
}
void main()
{
dictionary dict;
// Foo
// Foo
// opAssign(const Foo& other)
// ~Foo
dict['Foo'] = Foo();
// Foo
dict['Foo'] = @Foo();
// Foo
@dict['Foo'] = Foo();
// Foo
@dict['Foo'] = @Foo();
}
So the first variant takes a copy of Foo.
As soon as you use the handle-assignment syntax or take the handle of the instance of Foo, this is doing a handle assignment (storing a 'pointer' to the instance of Foo in the dictionary).. though technically the correct syntax is @dict['Foo'] = @Foo(); ?
Yes. Simple, isn't it? :)
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game