我的文件 testtest.m 看起来像:
pluse(1, 2)
function retval = pluse(input1, input2)
retval = input1 + input2;
endfunction
然后我得到:
error: 'pluse' undefined near line 1 column 1
error: called from
testtest at line 1 column 1
为什么我会收到这个错误?
最佳答案
为了正确回答你的问题,我需要指出两点:
Octave 的实现有效地直接遵循了语言规则。任何以不是“函数声明”的语句开头的文件都被视为脚本,即一系列独立的语句。因此无害
1
在脚本的开头,它就像一个简单的“非函数声明”语句,但实际上它可以是任何东西。然后,脚本可以根据需要具有尽可能多的“on-the-go”函数定义。对于在“on-the-go”上下文中使用函数的语句,显然需要首先定义该函数。这遵循一个基本原则,即与函数相反,脚本有效地表示一组简单的语句,这些语句按顺序运行,无需任何预处理,并且人们可以期望简单地将这些命令复制/粘贴到它们的终端并期望它们运行。Matlab 最近的实现有效地打破了这种功能/范式。要了解我的意思,请将上面的代码复制粘贴到新的终端中(或突出显示然后按 F9)并观察它是否中断。脚本不再是可复制/粘贴的,但假设 matlab 将先读取并加载任何函数定义,然后返回并尝试运行剩余的命令;换句话说,matlab 现在有点像对待它的功能一样对待脚本。请注意,matlab 仍然需要一个脚本来以非函数声明语句开头,因此实际上该位与需要以“1”开头的 Octave 音程相同。唯一改变的是这种预先加载“on-the-go”函数的前瞻行为,我认为这在脚本上下文中不一定是一件好事。
我认为 Octave 的方法更有意义,尽管您在(无意中)将脚本视为有效而不是脚本时指出使用 matlab 很方便。应该首先不应该这样做。如果您需要前瞻功能和嵌套,您真的应该首先编写适当的函数并提供相关的范围上下文。
关于octave - 在 Octave 中运行包含本地函数的简单脚本时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50404236/