如何刷新Octave对类方法的了解?

时间:2018-03-17 11:29:59

标签: octave

我在Octave中定义了一个名为myobj的{​​{3}}类。它的构造函数位于相对路径@myobj/myobj.m

function c = myobj(arg = "hi")
   s.arg = arg;
   c = class(s, "myobj");
end

当我运行octave-cli并构造此类的实例时,Octave不知道如何描述/打印它:

octave:1> o = myobj()
o = <class myobj>

我知道使用display类方法来允许这个。现在我添加了文件@myobj/display.m,内容为:

function display(obj)
   printf("%s = <arg = \"%s\">\n", inputname(1), obj.arg);
end

但Octave没有找到这个新的类功能。在做了一些研究后,有人说运行命令rehashclear all会导致Octave找到新函数,但它们不会:

octave:2> o = myobj()
o = <class myobj>
octave:3> rehash
octave:4> o = myobj()
o = <class myobj>
octave:5> clear all
octave:6> o = myobj()
o = <class myobj>
octave:7> clear -a
octave:8> o = myobj()
o = <class myobj>
octave:9> clear -a *
octave:10> o = myobj()
o = <class myobj>
octave:11> clear -c *
octave:12> o = myobj()
o = <class myobj>

重启Octave确实解决了这个问题:

octave:1> o = myobj()
o = <arg = "hi">

如果在不重新启动Octave的情况下删除此功能,则会再次出现问题:

octave:2> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:2> rehash
octave:3> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:3> clear all
octave:4> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:4> clear all *
octave:5> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:5> clear -a
octave:6> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:6> clear -a *
octave:7> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:7> clear -c *
octave:8> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'
octave:9> clear display
octave:10> o = myobj()
error: no such file, '/tmp/tmp.6ms6lw2GW0/@myobj/display.m'

有没有人知道我可以运行的命令让Octave意识到这些功能的变化?当然,这对于CLI来说也不算太糟糕,但我确实喜欢使用GUI,重新启动它可能很烦人。

注意:我使用的是v4.2.1,配置为“x86_64-redhat-linux-gnu”。

编辑:我能够在Windows 10上使用v4.2.2重现此功能,配置为“x86_64-w64-mingw32”。

0 个答案:

没有答案