How to check whether a structure exists?

122 次查看(过去 30 天)
Dear all:
I have a simple question and I can't find an answer on the web...
I have a function that takes arguments in. One argument is a structure array, and inside the function I want to test whether this argument is specified and feed into the function.
I tried isexist(), but this is not for a structure. isstruct() can test whether it is a structure, but the name must exist first. isfield() can check if a structural field exist, but not the structure itself.
So my question is, how to test whether a structure exist?
Any help is appreciated.
Cheers
Ben

采纳的回答

Walter Roberson
Walter Roberson 2011-5-7
exist('structurename','var')
[EDITED, Jan Simon 25-Feb-2012 22:00 UTC]: exists -> exist
  6 个评论
John McGraw
John McGraw 2017-10-17
This does not work for me:
exist(nonExistantFileStruct, 'var')
??? Undefined function or method 'exist' for input arguments of type 'struct'.
Walter Roberson
Walter Roberson 2017-10-17
Pass in the name of the structure, not the structure itself.

请先登录,再进行评论。

更多回答(3 个)

Céldor
Céldor 2012-3-31
This thread is old but if someone still needs an answer then
exist('var_name') works and returns 0 if a structure does not exist in memory
Regards
  2 个评论
Jan
Jan 2012-3-31
This is no sufficient solution in opposite to the advice Walter gave 329 days ago: "exist('var_name')" replies a non-zero if there is a corresponding .m, .p, .mex file or folder in the path, or if there is a Java class with this name. Because all these chances are checked, "exist()" is slow when used without 2nd argument. See "help exist".
Walter Roberson
Walter Roberson 2012-3-31
But it can return non-zero if there happens to be something else by the same name, such as a function or directory. It is better to use the optional second argument to be specific that you are inquiring about a variable.

请先登录,再进行评论。


Matt Fig
Matt Fig 2011-5-7
I am not entirely sure what you want to do, but here is an example input parsing... You don't have to make your function error as I do, but the checks are there.
function [] = takestwoargs(A,B)
% Takes two arguments, the first is a structure, the second
% is a double. Both are required.
if nargin~=2
error('Two input arguments required.')
elseif ~isstruct(A)
error('The first input must be a structure.')
elseif ~isa(B,'double')
error('The second argument must be a double.')
end
%
%
%
%
EDIT In response to your comment below. To make defaults, you could do something like this:
function [] = takestwoargs(A,B)
% Takes two arguments, the first is a structure, the second
% is a double. Both are required.
N = nargin; % Check how many inputs were passed.
if N==0
A = struct('string','hello','yes','lengths',4);
B = 5;% Defaults.
elseif N==1
B = 5;% Default.
else
% Or make defaults and issue a warning that
% argumenst beyond the second are ignored....
error('Two many input arguments.')
end
if ~isstruct(A)
% Or make a default and issue a warning...
error('The first input must be a structure')
elseif ~isa(B,'double')
% Same as above...
error('The second argument must be a double')
end
  2 个评论
Ben Wang
Ben Wang 2011-5-7
Hi Matt:
Thanks for helping out here. The function looks something like the following:
function [] = likelihood(A,B)
and B is a structure.
I guess I could use
if nargin~=2
error('Two input arguments required.')
to test whether B exists, but I don't want to put a restriction since if it is not parse to the function, I could use a default value specified inside the function.
Sorry I didn't make myself clear before. Is there a function I can test B exists in the workspace?
Cheers
Ben

请先登录,再进行评论。


Jason Garcia
Jason Garcia 2012-2-25
Or alternatively, you could try:
x =
x: 1
y: 2
z: 3
>> any(strcmp(fieldnames(x),'d'))
ans =
0
>> any(strcmp(fieldnames(x),'y'))
ans =
1

类别

Help CenterFile Exchange 中查找有关 Variables 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by