You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Haxe currently allows for abstracts to redefine unary operators such as a++, as well as binary operators, such as a + b, and even other operators such as ternary, range, or array access. However, based on the documentation I have read, it does not currently allow overriding the function call operation.
I would imagine this would look something like so:
abstract CallableThing(CallableThingBase) {
@:op(Int, Bool)
public function call(arg1:Int, arg2:Bool):Void {
trace('Arg 1: $arg1');
trace('Arg 2: $arg2');
}
}
...
var c:CallableThing = new CallableThing();
// You can now make calls to C as though it were an Int->Bool->Void function.
c(1, true);
At compilation time, c(1, true) would be replaced with CallableThing_Impl_.call(c, 1, true).
The main sticking points here is the actual syntax; @:op(Int, Bool) is redundant since we already have the function signature, @:op(()) can't necessarily be interpreted by the compiler I don't think, and the @:callable metadata is already in use.
The text was updated successfully, but these errors were encountered:
After reading your linked discussion, I concluded that #93 is related (and possibly a prerequisite for this) but does not directly supersede this proposal.
This proposal is not referring to the overload keyword but to this specific feature:
I am essentially proposing that a new operator be added (which abstracts could replace) which would allow for abstract objects to be called as though they were anonymous functions.
Haxe currently allows for abstracts to redefine unary operators such as
a++
, as well as binary operators, such asa + b
, and even other operators such as ternary, range, or array access. However, based on the documentation I have read, it does not currently allow overriding the function call operation.I would imagine this would look something like so:
At compilation time,
c(1, true)
would be replaced withCallableThing_Impl_.call(c, 1, true)
.The main sticking points here is the actual syntax;
@:op(Int, Bool)
is redundant since we already have the function signature,@:op(())
can't necessarily be interpreted by the compiler I don't think, and the@:callable
metadata is already in use.The text was updated successfully, but these errors were encountered: