MATLAB - передача параметра указателя на функцию в другую функцию как дескриптор

Существует, вероятно, более изящное решение, но это - то, что я придумываю первое, что пришло на ум:

string myString = "ThisIsMyCapsDelimitedString";

for (int i = 1; i < myString.Length; i++)
{
     if (myString[i].ToString().ToUpper() == myString[i].ToString())
     {
          myString = myString.Insert(i, " ");
          i++;
     }
}
9
задан Jon Seigel 17 May 2010 в 04:12
поделиться

1 ответ

На самом деле просто не используйте символ @, используйте его, когда вы вызываете функцию Repopulate . Пример:

function x = fun1(a,m)
    x = fun2(a,m);
end

function y = fun2(b,n)
    y = n(b);
end

, который мы называем:

> fun1([1 2 3], @sum)
6

См. Документацию для Передача аргументов дескриптора функции


Обратите внимание, что вы можете проверить, является ли аргумент дескриптором функции, с помощью: isa (m, 'function_handle ') . Поэтому вы можете сделать свою функцию Repopulate более гибкой, приняв как дескриптор функции, так и имя функции в виде строки:

function x = fun(a,m)
    if ischar(m)
        f = str2func(m);
    elseif isa(m,'function_handle')
        f = m;
    else
        error('expecting a function')
    end
    x = fun2(a,f);
end

, которую теперь можно вызывать в обоих направлениях:

fun1([1 2 3], @sum)
fun1([1 2 3], 'sum')
13
ответ дан 4 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: