Is there exist() functionality for packages/namespaces?

17 ビュー (過去 30 日間)
Chris
Chris 2023 年 1 月 6 日
回答済み: Ashley Trowell 2023 年 10 月 26 日
Create a package and put it somewhere in Matlab's path. If you know the parent directory, you could use exist('/path/+package'), but you don't need to know the path to use the package, so that's silly.
The current best solution I have is to try/catch calling a function in the package.

採用された回答

Ashley Trowell
Ashley Trowell 2023 年 10 月 26 日
There is, but it is hidden. Mathworks doesn't encourage packages and namespaces.
Create this lambda function:
packageExists = @(pkgName) ~isempty(meta.package.fromName(pkgName));
Then run
pkgExist = packageExists('myPkg');
A nice utility is here that just adds the functionality the the exist function, which is what Mathworks should do.

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2023 年 1 月 6 日
You can exist() a function inside the package
exist('matlab.internal.lang.capability.Capability')
ans = 8
which matlab.internal.lang.capability.Capability
/MATLAB/toolbox/matlab/capabilities/+matlab/+internal/+lang/+capability/Capability.m % matlab.internal.lang.capability.Capability constructor
You can also which the + form of a function (but not the package itself)
which +matlab/+internal/+lang/+capability/Capability
/MATLAB/toolbox/matlab/capabilities/+matlab/+internal/+lang/+capability/Capability.m % matlab.internal.lang.capability.Capability constructor
which +matlab/+internal/+lang/+capability
'+matlab/+internal/+lang/+capability' not found.
  5 件のコメント
Chris
Chris 2023 年 1 月 7 日
編集済み: Chris 2023 年 1 月 7 日
The difference compared to my package would be that the classdef file is not in an @ folder, but in the package root. So it's another example of
exist package.Class
that works.
I wouldn't expect a class method to be available to exist or which (though it turns out they can be found if treated as files), so that just leaves the package itself (I can live without that, I guess), and functions in the +folder--which are the one thing treated differently between which and exist.
Walter Roberson
Walter Roberson 2023 年 1 月 7 日
Class methods can be found using which, but sometimes they will not be located unless the class has been loaded at least once in this session (since the last clear classes)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeWhos についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by