我知道你可以在 Octave 中创建一个函数文件,其中文件名与定义一个函数的函数相同,但我想在一个文件中定义多个函数。有什么方法可以做到这一点,或者我是否需要为每个函数创建一个单独的文件。
在这个答案中,我将假设您的主要目标是一个整洁的工作空间,而不是明确的单文件要求。
让我们摆脱单文件方法。您可以创建脚本m 文件(不是函数 m 文件),并在其中定义许多命令行函数。八度手册有一个关于此的部分。这是一个例子:
% in file loadfunctionDefinitions.m
1; % statement with side-effect, to mark this file as a script. See docs.
function Out = Return1(); Out = 1; end
function Out = Return2(); Out = 2; end
% ... etc
Run Code Online (Sandbox Code Playgroud)
% in your main octave session / main script:
X = Return1() + Return2();
Run Code Online (Sandbox Code Playgroud)
但是,一般不建议这样做。特别是如果您需要与 matlab 兼容的代码,因为 matlab 比 Octave 晚得多才引入“脚本局部函数” ,并且决定以与现有 Octave 实现不兼容的方式进行操作:matlab 期望在最后定义脚本局部函数脚本的;Octave 希望在首次使用之前定义它们。然而,如果你使用普通的函数文件,一切都很好。
虽然我很欣赏“我不喜欢一个充满功能的文件夹”的情绪,但每个文件一个功能的方法实际上有很多好处(特别是如果您从终端进行编程,这使得大量工具的使用量增加了一倍)有用)。例如,您可以轻松地使用grep来查找哪些函数使用了特定变量。或者比较不同提交中各个函数的变化等。
通常,问题更多的是当存在其他重要文件(例如数据等)时,使此类功能文件散布在目录中,并且在一个地方拥有如此多的文件使得很难找到您想要的内容,并且感觉不整洁。但是,您可以采用许多其他方法,而不是使用带有命令行定义的单个文件,从编程的角度来看,这些方法可能也更好,例如:
~/+MyFunctions/myfun.m可以从~/via访问MyFunctions.myfun(),而不必添加+MyFunctions到路径(事实上你不应该这样做)。如果您使用基于更新样式的类,最后一个选项也可以实现单文件解决方案classdef,它允许您在与类定义相同的文件中定义方法。classdef但请注意,对定义类的八度支持仍然有些有限。