Реализация локальных функций в скриптах в Octave отличается от реализации Matlab. Octave требует, чтобы локальные функции в скриптах были определены до их использования. Но Matlab требует, чтобы все локальные функции в сценариях были определены на конце файла.
Таким образом, вы можете использовать локальные функции в сценариях обоих приложений, но вы не можете написать сценарий, который будет работать в обоих приложениях. Так что просто используйте функции, если вам нужен код, который будет работать как в Matlab, так и в Octave.
Примеры:
Функции в конце
disp('Hello world')
foo(42);
function foo(x)
disp(x);
end
В Matlab R2019a:
>> myscript
Hello world
42
В октябре 5.1.0:
octave:1> myscript
Hello world
error: 'foo' undefined near line 2 column 1
error: called from
myscript at line 2 column 1
Функции перед использованием
disp('Hello world')
function foo(x)
disp(x);
end
foo(42);
В Matlab R2019a:
>> myscript
Error: File: myscript.m Line: 7 Column: 1
Function definitions in a script must appear at the end of the file.
Move all statements after the "foo" function definition to before the first local function definition.
В октаве 5.1.0:
octave:2> myscript
Hello world
42
Как это работает
Обратите внимание, что технически функции здесь, в Octave, являются не "локальными функциями", а "функциями командной строки". Вместо того, чтобы определять функцию, которая является локальной для сценария, они определяют глобальные функции, которые возникают при оценке оператора function
.