'主' matlab包的功能

时间:2015-08-27 13:24:35

标签: matlab

我有什么:

我有一个名为myscript.m的matlab脚本,该脚本使用p编码辅助函数fcn_A.pfcn_B.p(我编写并拥有源代码)。

我想要的是什么:

我希望将这些作为一个单元分发给其他人,以便:

  • 主脚本可以通过>> myscript
  • 运行
  • 辅助函数可以在主脚本之外访问 - 但仍然受到保护。
  • >> myscript运行一个脚本 - 而不是一个函数。即它定义的变量是在matlab基础环境中设置的
  • 所有内容都作为一个目录或单个文件分发。

我也希望尽量避免保护myscript。这样,它就可以作为如何使用fcn_Afcn_B的示例。

编辑:最理想的情况是,我喜欢您只是移动到路径或工作目录中的文件或文件夹,然后一切正常,甚至无需更改路径。

我尝试了什么:

将所有内容放入同一个脚本文件中并不符合第二个要求。

使它成为一个类(通过classdef文件或@myscript目录)并不符合第三个要求。

使其成为一个包(使用+myscript目录)并不符合第一个要求。

我相信我需要

我相信如果有办法定义一个默认的'包的功能。有点像键入+mypackage/Contents.m时显示help mypackage的内容。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:1)

将包含函数和脚本的文件夹添加到MATLAB路径中。满足所有4个条件。

答案 1 :(得分:1)

我(和mathworks)的方式通常会这样做:

  1. 确保文件夹中包含所有相关文件
  2. 拉链
  3. 现在你只有1个文件可供分发,甚至包括文档

    请注意,这实际上是matlab本身所做的。请参阅此链接,例如:

    Ismemberf on matlab file exchange

答案 2 :(得分:1)

事实证明,我的所有要求实际上都可以通过使用assignin来完成。

我的解决方案如下:

<强>文件:

@myscript
@myscript/myscript.m
@myscript/fcn_A.p
@myscript/fnc_B.p

<强> @的MyScript / myscript.m

classdef myscript
  methods (Static)
    fcn_A
    fcn_B
  end
  methods
    function self = myscript()
      % Using a variable defined in the calling environment (if defined)
      outside_variable = evalin('caller', 'outside_variable', NaN);
      if isnan(outside_variable)
        outside_variable = 'default value';
      end
      ... code goes here ...
      outside_variable = self.fcn_A(parameters, outside_variable);
      % Putting the variable back in the calling environment (even if not defined before)
      assignin('caller', 'outside_variable', outside_variable);
    end
  end
end

现在:

  • 运行>> myscript将运行类构造函数并返回一个 空类对象,我可以忽略它。
  • myscript.fcn_Amyscript.fcn_B可以被调用,因为它们是静态类函数。
  • variable_to_save将按预期在基本环境中设置。
  • @myscript目录移动到新计算机的路径中足以使其正常工作。

但仍存在一个问题。 如果fcn_Afcn_B是一个类,这将不起作用,因为MATLAB不允许堆栈类。坏消息!我在这个问题中没有提到这一点,因为我无法想象它会有所作为......