添加搜索路径之前classdef派生类

12个视图(30天)
%编辑:纠正失配.m-filename和类名的例子。我的坏!
我想构建一个派生类 derived.m 可以直接按“运行”-scipt按钮启动为例。然而,基类 base.m 位于一条路径,MATLAB在运行时是未知的。
%文件:pwd \ derived.m
classdef派生的<基地
方法
函数obj =派生()
%调用超类(基类)
obj = obj@base;
结束
结束
结束
%文件:D: \ notPwd \ base.m
classdef基地<处理
方法
函数obj =基础()
disp (“基本被称为“);
结束
结束
结束
通常,我会添加文件 base.m 到一个文件夹 +基地 在的目录 derived.m ,或叫 目录() 在脚本的开始。不幸的是,我无法用一个类做后者,因为之前不允许插入代码关键字 classdef
目录“D: \ notPwd”);% % %不允许派生的。m是a class defintion file, not a script !
classdef派生的<基地
% […]
另一个解决方案(至少我认为这将是):创建一个本地副本 pathdef.m 与路径 base.m 补充道。缺点是,我就会创建 pathdef.m 手动在控制台或辅助脚本,但一旦创建,MATLAB将加载本地文件默认的MATLAB目录。
目录“D: \ notPwd”);%步骤1:添加路径的基础。当前打开的搜索路径会话
savepath (fullfile (pwd,“pathdef.m”));pathdef %第二步:保存搜索路径。位于当前工作目录
MATLAB % % % % % %重开
myDerived.m;%步骤3:myBase.m运行。MATLAB使用本地pathdef。米,位于myBase。从添加搜索路径(“D: \…”)
不幸的是,这并不奏效,尽管MATLAB似乎选择正确的文件(即当地 pathdef.m 在启动时)。我检查,通过调用 这pathdef 在控制台。是的,指定的搜索路径是正确的。我做了一个测试运行 myDerived.m 后调用 目录() 和之前调用 savepath () 。它工作得很好。
为什么上面不工作呢? 类定义解释之前的搜索路径加载(声明>定义)?有其他选择吗?我已经看了 类属性 希望能找到一个属性 路径 这将允许我(如特定的搜索路径定义。 classdef (path = ' D: \ notPwd ') 但什么也没发现。

接受的答案

史蒂文的主
史蒂文的主 2022年5月7日
你们班myBase书面文件的基础。m是 以MATLAB作为myBase。当类的名称或主要功能在文件与文件名不同,MATLAB知道它的 文件 的名字。你有两种选择:
  1. 把基地。米在你的路径和您的派生类继承基代替myBase。
  2. 改变基础的文件名。myBase m。m和myBase。在你的路径。
另一个可能的选择,如果你不希望你的基类全局命名空间,将会把它放在一个包目录中。如果myBase。米在一个文件夹命名为+ myclass然后你将从myclasses.myBase继承。
一个派生类的基类 必须 容易接近的MATLAB时实例化派生类实例。没有时间让它(通过访问路径操作或类似的)在你告诉MATLAB开始建设类,但它实际上开始前。
1评论
Florian Berzsenyi
Florian Berzsenyi 2022年5月9日
可悲的是,这不是它。我犯了一个错误当编写示例代码片段。我的原始代码没问题,当我把这两类放在同一个目录中。我只是想将一组基类存储在一个中央位置,而不是存储在每个位置多个副本的基类是必要的。
如果我正确理解你,这是不可能的因为MATLAB runtine之前解决了类声明。前的基类没有实例化派生类,因此不能由MATLAB发现当它看起来基本在派生类的实例化。
我试图解决这个问题通过使用一个地方 pathdef.m 的路径 base.m 添加, startup.m 调用 目录() 。前不工作(见OP),而后者 并解决这个问题 只有在MATLAB与工作目录设置为启动derived.m的道路
我试图寻找无非是一个 # include < m > 在MATLAB。它根本就不存在。如果我是MATLAB开发者,我将添加一个 路径 参数 类属性 所以你可以写:
%的类属性:在运行时,在实例化之前,
% MATLAB中读取属性路径,并调用目录()所提供的值。
classdef基地(path =“D: \ notPwd”)<处理
方法
% C 'tor等等。
结束
结束

登录置评。

更多的答案(0)

类别

找到更多的在搜索路径帮助中心文件交换

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!