exponenta event banner

str2func

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

Синтаксис

Описание

пример

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