str2func

Создайте указатель на функцию из вектора символов

Синтаксис

fh = str2func(str)

Описание

пример

fh = str2func(str) создает указатель на функцию, fh, с имени функции или текстового представления анонимной функции.

Указатели на функцию, созданные с помощью str2func, не имеют доступа к переменным за пределами их локальной рабочей области или к вложенным функциям. Если ваш указатель на функцию содержит эти переменные или функции, MATLAB® выдает ошибку, когда вы вызываете указатель. Кроме того, если вы используете текстовое представление анонимной функции, получившийся указатель на функцию не имеет доступа к закрытым или локальным функциям.

Примеры

свернуть все

Преобразуйте вектор символов 'ones' в указатель на функцию и вызовите функцию ones использование указателя.

c = 'ones';
fh = str2func(c)
fh = function_handle with value:
    @ones

fh(1,5)
ans = 1×5

     1     1     1     1     1

Преобразуйте вектор символов, который представляет анонимную функцию указателю на функцию. Переменные рабочей области не доступны функции str2func. Поэтому включайте значения в вектор символов, которые необходимы, чтобы выполнить выражение и которые не заданы как входные параметры функции.

Задайте вектор символов, который представляет анонимную функцию 7x - 13. Преобразуйте вектор символов в указатель на функцию.

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

    @(x)7*x-13

Вызовите анонимную функцию с помощью указателя.

fh(3)
ans =

     8

Если вы включаете переменные рабочей области в свой вектор символов, str2func создает указатель на функцию, но MATLAB выдает ошибку, когда вы вызываете указатель на функцию.

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

fh(3)
Undefined function or variable 'a'.

Error in @(x)7*x-a

Создайте функцию, которая возвращается, два указателя на функцию раньше моделировали список игры в кости. Первые умирают (d1), возвращает номер от 1 до 6, но вторые умирают (d2), всегда возвращает номер 1.

Создайте следующую функцию в папке на вашем пути MATLAB. Когда str2func используется с вектором символов, представляющим анонимную функцию, он не имеет доступа к локальной функции. Поэтому MATLAB вызывает встроенную функцию randi и возвращает номер от 1 до 6. Функция eval действительно имеет доступ к локальной функции, таким образом, d2 использует перегруженный randi и всегда возвращается 1.

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

function r = randi(~,~)
r = 1;
end

В командной строке вызовите функцию diceRoll.

[p1,p2] = diceRoll
p1 =

  function_handle with value:

    @()randi([1,6],1)


p2 =

  function_handle with value:

    @()randi([1,6],1)

И p1 и p2, кажется, сопоставлены с той же анонимной функцией.

Вызовите указатели на функцию. Результат p1 отличается от 1 до 6. Результат p2 всегда равняется 1.

p1()
p2()
ans =

     5


ans =

     1

Входные параметры

свернуть все

Текст, чтобы преобразовать в указатель на функцию, заданный как имя функции или вектор символов или представить скалярное представление в виде строки анонимной функции.

Пример: str = 'cos'

Пример: str = '@(x) x.^2'

Советы

  • Указатель на функцию, который хранит значения переменных, не сохраняет свое исходное значение, когда вы используете func2str, чтобы преобразовать его в вектор символов, и затем преобразовываете его назад в указатель с str2func.

Расширенные возможности

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте