我在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没有找到这个新的类功能。在做了一些研究后,有人说运行命令rehash
或clear 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”。