Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a function handle and how is it useful?

Can somebody explain to me the meaning of the @ (function handle) operator and why to use it?

like image 264
Dikla Avatar asked Apr 28 '09 09:04

Dikla


People also ask

What is a function handle?

A function handle is a MATLAB® data type that represents a function. A typical use of function handles is to pass a function to another function. For example, you can use function handles as input arguments to functions that evaluate mathematical expressions over a range of values.

Is function handle a variable?

Function handles are variables that you can pass to other functions. For example, calculate the integral of x2 on the range [0,1]. q = integral(f,0,1); Function handles store their absolute path, so when you have a valid handle, you can invoke the function from any location.


1 Answers

The function handle operator in MATLAB acts essentially like a pointer to a specific instance of a function. Some of the other answers have discussed a few of its uses, but I'll add another use here that I often have for it: maintaining access to functions that are no longer "in scope".

For example, the following function initializes a value count, and then returns a function handle to a nested function increment:

function fHandle = start_counting(count)    disp(count);   fHandle = @increment;    function increment     count = count+1;     disp(count);   end  end 

Since the function increment is a nested function, it can only be used within the function start_counting (i.e. the workspace of start_counting is its "scope"). However, by returning a handle to the function increment, I can still use it outside of start_counting, and it still retains access to the variables in the workspace of start_counting! That allows me to do this:

>> fh = start_counting(3);  % Initialize count to 3 and return handle      3  >> fh();  % Invoke increment function using its handle      4  >> fh();      5 

Notice how we can keep incrementing count even though we are outside of the function start_counting. But you can do something even more interesting by calling start_counting again with a different number and storing the function handle in another variable:

>> fh2 = start_counting(-4);     -4  >> fh2();     -3  >> fh2();     -2  >> fh();  % Invoke the first handle to increment      6  >> fh2();  % Invoke the second handle to increment     -1 

Notice that these two different counters operate independently. The function handles fh and fh2 point to different instances of the function increment with different workspaces containing unique values for count.

In addition to the above, using function handles in conjunction with nested functions can also help streamline GUI design, as I illustrate in this other SO post.

like image 187
gnovice Avatar answered Oct 04 '22 12:10

gnovice