我之前从未使用过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。
答案 0 :(得分:1)
我看过你的档案。
错误的新闻,正如我在评论中所说,.csl
文件无效的matlab / octave代码。这让我相信可能会发生下列情况之一:
.csl
文件是"已处理"在其他地方生成实际的 matlab / octave兼容类.csl
文件只是一个伪代码"规范",实际 matlab / octave类在别处提供,你应该假设加载'不知何故。.csl
文件转换成适当的matlab / octave代码。好的新闻是,这很容易转换为工作代码。由于您需要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)]