Callable object

Last updated

A callable object, in computer programming, is any object that can be called like a function.

Contents

In different languages

In C++

In C++, any class that overloads the function call operator operator() may be called using function-call syntax.

importstd;structFoo{voidoperator()()const{std::println("Called.");}};intmain(){Fooinstance;instance();// This will output "Called." to the screen.}

In C#

In PHP

PHP 5.3+ has first-class functions that can be used e.g. as parameter to the usort() function:

$a=array(3,1,4);usort($a,function($x,$y){return$x-$y;});

It is also possible in PHP 5.3+ to make objects invokable by adding a magic __invoke() method to their class: [1]

classMinus{publicfunction__invoke($x,$y){return$x-$y;}}$a=array(3,1,4);usort($a,newMinus());

In Python

In Python any object with a __call__() method can be called using function-call syntax.

classFoo:def__call__(self)->None:print("Called.")instance:Foo=Foo()instance()# This will output "Called." to the screen.

[2]

Another example:

classAccumulator:def__init__(self,n:int)->None:self.n=ndef__call__(self,x:int)->int:self.n+=xreturnself.n

In Dart

Callable objects are defined in Dart using the call() method.

classWannabeFunction{call(Stringa,Stringb,Stringc)=>'$a$b$c!';}main(){varwf=newWannabeFunction();varout=wf("Hi","there,","gang");print('$out');}

[3]

In Swift

In Swift, callable objects are defined using callAsFunction. [4]

structCallableStruct{varvalue:IntfunccallAsFunction(_number:Int,scale:Int){print(scale*(number+value))}}letcallable=CallableStruct(value:100)callable(4,scale:2)callable.callAsFunction(4,scale:2)// Both function calls print 208.

References

  1. PHP Documentation on Magic Methods
  2. Bösch, Florian. "What is a "callable" in Python?". StackOverflow.com. Retrieved 24 September 2017.
  3. "A Tour of the Dart Language". www.dartlang.org. Retrieved 2019-03-25.
  4. "Declarations — The Swift Programming Language (Swift 5.6)". docs.swift.org. Retrieved 2022-02-28.