GNU Octave:.csl文件未重新编译

时间:2017-07-12 23:51:59

标签: class octave gnu

我之前从未使用过Octave(我使用过Matlab),但我安装了GNU Octave,因为我想使用GNU Octave编写的一个存储库/包。该存储库包含扩展名为.csl的文件,这些文件在.m文件(主脚本)中调用,没有扩展名。例如,名为foo.csl的文件在主脚本中被调用为函数foo()。但是,当我运行主脚本(.m文件作为函数调用.csl文件)时,它会抛出一个错误,指出函数foo()未定义。文件foo.csl的开头如下:

class foo
% Definition about the class foo

public x
public y
public z

我搜索了与GNU Octave相关的.csl文件扩展名,但我找不到任何有用的东西。我在Windows 10上使用最新版本的GNU Octave。

1 个答案:

答案 0 :(得分:1)

我看过你的档案。

错误的新闻,正如我在评论中所说,.csl文件无效的matlab / octave代码。这让我相信可能会发生下列情况之一:

  • .csl文件是"已处理"在其他地方生成实际的 matlab / octave兼容类
  • .csl文件只是一个伪代码"规范",实际 matlab / octave类在别处提供,你应该假设加载'不知何故。
  • 这是作业的一部分,无论谁给你这个代码,都希望将.csl文件转换成适当的matlab / octave代码。
  • 写这篇文章的人并不了解matlab,这只是错误的代码。

好的新闻是,这很容易转换为工作代码。由于您需要RecDomain"类"本质上是一个只有公共字段而没有方法的简单类,它可以直接用简单的struct代替。这意味着您可以使用以下内容替换整个RecDomain.csl文件:

%%% in file RecDomain.m

function Out = RecDomain (varargin)
%RecDomain() creates a domain with given parameters.
%RecDomain(d) creates a domain copy.  

  switch nargin 
     case 1 % a struct was given as input
        Out  = varargin{1};

     case 3 % individual Dx, Dy, Dz arguments were given as input
        Out.Dx = varargin{1};
        Out.Dy = varargin{2};
        Out.Dz = varargin{3};

     otherwise 
        error('Wrong RecDomain constructor.\n');
  endswitch
endfunction

然后您的model1.m脚本将按原样运行。

<子> PS。 (显然上面的内容过于简单,没有输入检查/断言等,但你得到了图片)。

如果这是一个人为的简单示例,并且您的实际.csl文件更复杂,那么您必须根据.csl&#34;自己将它们转换为正确的八度音阶类。规范&#34;,这超出了本答案的范围。如果您想尝试,Octave会为the new matlab object-oriented style using the classdef keyword提供一些有限的支持,但在大多数情况下,octave会使用matlab's old (pre-2008) style实现面向对象。请参阅此处查看相应的官方文档条目:[matlab (new syntax)] / [octave (old syntax)]