首页 文章

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

提问于
浏览
-1

我之前从未使用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 回答

  • 1

    我看过你的文件了 .

    坏消息是,正如我在评论中所说, .csl 文件不是有效的matlab / octave代码 . 这让我相信可能会发生以下情况之一:

    • .csl 文件在其他地方是"processed"以生成实际的matlab / octave兼容类

    • .csl 文件只是一个伪代码"specification",而实际的matlab / octave类是在别处提供的,你以某种方式加载它''re supposed to ' .

    • 这是作业的一部分,无论谁给你这个代码,都希望将 .csl 文件转换成适当的matlab / octave代码 .

    • 谁写了这个不知道matlab,这只是简单错误的代码 .

    好消息是,这很容易转化为工作代码 . 由于您所需的 RecDomain "class"本质上是一个只有公共字段而没有方法的简单类,因此它可以直接替换为简单的 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 "specification"将它们转换为正确的八度音程类,这超出了本答案的范围 . Octave为the new matlab object-oriented style using the classdef keyword提供了一些有限的支持,如果您想尝试,但大多数情况下八度音程使用matlab's old (pre-2008) style实现面向对象 . 请参阅此处查看相应的官方文档条目:[matlab (new syntax)] / [octave (old syntax)]

相关问题