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 функция. Поэтому включите в вектор символов значения, которые необходимы для вычисления выражения и которые не определены как входные параметры функции.

Задайте вектор символов, который представляет анонимную функцию 7 x - 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

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

Создайте следующую функцию в папке на пути MATLAB. Когда str2func используется с вектора символов, представляющей анонимную функцию, она не имеет доступа к локальной функции. Поэтому MATLAB вызывает встроенную randi function, и возвращает число от 1 до 6. The 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