Есть несколько вещей, которые неверны в том, что вы говорите (включая утверждение, что октава была построена для поддержки matlab: p)
Вы объединяете понятия «нормальных» (то есть файловых) функций со встроенными функциями, с дескрипторами функций и анонимными функциями. Все это довольно базовые c понятия в октаве (и в матлабе). И что бы это ни значило, matlab и октава идентичны в этом отношении.
Вот соответствующая часть руководства. Это может показаться много, но каждая ссылка на самом деле довольно короткая и стоит прочитать. в этом вопросе раздел 11.11, посвященный дескрипторам функций и анонимным функциям.
Я попытаюсь объяснить вкратце ниже, но стоит прочитать руководство.
По сути, выражение @(t) 2*t.^2 +5*t;
создает «анонимная функция» и возвращает «дескриптор функции». fn1 = @(t) 2*t.^2 +5*t;
поэтому захватывает созданный дескриптор функции в переменной fn1
. Это означает, что вы можете использовать дескриптор для вызова базовой функции, которую он представляет, как fn1( t )
, или передать ее в качестве аргумента функциям.
С другой стороны, обычные функции обычно определяются в своих собственных .m файлы. Это делает их доступными для вызова, но не для передачи в качестве переменных. Если вы хотите передать существующую функцию m-файла в качестве переменной другой функции, вам нужно сначала создать дескриптор. Например, если у вас есть функция с именем myfunction
, вы можете сделать myhandle = @myfunction
. После этого вы можете передать myhandle
в функции или даже вызвать его как myhandle()
, чтобы вызвать основную функцию, которую она представляет (т.е. myfunction
).
PS. Встроенные функции - это совсем другое (вы создаете функцию из строки), и обсуждать их не стоит, поскольку они не рекомендуются ни matlab, ни октавой.