#1897 Call overloading

Xan Wed 30 May 2012

Is this possible to override/define call from a class:

class Foo {
  |Obj -> Obj| function

  ....

}

I want to call Foo like Foo(a) = Foo.function(a).

Is it possible?. I don't see in operator overloading.

Thanks, Xan

KevinKelley Wed 30 May 2012

static member?

class Foo {
  static const |Obj -> Obj| function := |Obj o->Obj| { o }
  static Obj method(Obj o) { o } 
}
class Main {
  static Void main() {
    echo(Foo.function("call a static member func"))
    echo(Foo.method("call a static method"))
  }
}

Note statics must be const; for non-static it's sometimes convenient to use the closure-member form, so you can change it at runtime, but for class members that doesn't apply, so those two variations are pretty much the same thing.

brian Wed 30 May 2012

I want to call Foo like Foo(a) = Foo.function(a).

I'm quite sure what you are asking, but Foo(a) is the constructor syntax which can map to a variety things include an instance or static constructor.

Xan Mon 4 Jun 2012

I'm ask if it's possible to do something like Foo(a) without being a constructor. Being an apply of Foo.function to a. It's just a shortcut. In C++ or C it could be done, or in python:

def __call__(self, *a):
    return self.funcio(*a)

thanks,

brian Mon 4 Jun 2012

No Fantom doesn't allow you to overload (..) operator today - it is handled only by constructors and Funcs.

Xan Mon 4 Jun 2012

Mmm.... a pain. Please, mark it as wishlist in future releases. I think it's pretty for O-O completion.

Regards, Xan.

Login or Signup to reply.