Main Content

# str2func

Construct function handle from character vector

## Syntax

``fh = str2func(str)``

## Description

example

````fh = str2func(str)` constructs a function handle, `fh`, from a function name or text representation of an anonymous function.Function handles created using `str2func` do not have access to variables outside of their local workspace or to nested functions. If your function handle contains these variables or functions, MATLAB® throws an error when you invoke the handle. Also, if you use a text representation of an anonymous function, the resulting function handle does not have access to private or local functions.```

## Examples

collapse all

Convert the character vector `'ones'` to a function handle, and call the `ones` function using the handle.

```c = 'ones'; fh = str2func(c)```
```fh = function_handle with value: @ones ```
`fh(1,5)`
```ans = 1×5 1 1 1 1 1 ```

Convert a character vector that represents an anonymous function to a function handle. Workspace variables are not available to the `str2func` function. Therefore, include values in the character vector that are necessary to evaluate the expression and that are not defined as function inputs.

Define a character vector that represents the anonymous function 7x – 13. Convert the character vector to a function handle.

```str = '@(x)7*x-13'; fh = str2func(str)```
```fh = @(x)7*x-13```

Call the anonymous function using the handle.

`fh(3)`
```ans = 8```

If you include workspace variables in your character vector, `str2func` creates the function handle, but MATLAB throws an error when you invoke the function handle.

```a = 13; str = '@(x)7*x-a'; fh = str2func(str); fh(3)```
```Undefined function or variable 'a'. Error in @(x)7*x-a```

Create a function that returns two function handles used to simulate the roll of dice. The first die (`d1`) returns a number from 1 through 6, but the second die (`d2`) always returns the number 1.

Create the following function in a folder on your MATLAB path. When `str2func` is used with a character vector representing an anonymous function, it does not have access to the local function. Therefore, MATLAB calls the built-in `randi` function, and returns a number from 1 through 6. The `eval` function does have access to the local function, so `d2` uses the overloaded `randi` and always returns 1.

```function [d1,d2] = diceRoll str = '@()randi([1 6],1)'; d1 = str2func(str); d2 = eval(str); end function r = randi(~,~) r = 1; end ```

At the command prompt, call the `diceRoll` function.

```[p1,p2] = diceRoll ```
```p1 = function_handle with value: @()randi([1,6],1) p2 = function_handle with value: @()randi([1,6],1) ```

Both `p1` and `p2` appear to be associated with the same anonymous function.

Invoke the function handles. The result from `p1` varies from 1 through 6. The result from `p2` is always 1.

```p1() p2() ```
```ans = 5 ans = 1 ```

## Input Arguments

collapse all

Text to convert to a function handle, specified as a function name or a character vector or string scalar representation of an anonymous function.

Example: `str = 'cos'`

Example: `str = '@(x) x.^2'`

## Tips

• A function handle that stores variable values does not retain its original value when you use `func2str` to convert it to a character vector, and then convert it back to a handle with `str2func`.

## See Also

### Topics

Introduced before R2006a

Download ebook