problem with eval notation
Show older comments
I have a question about eval in this script
function sort=sortstructure(strucvector, field)
if isfield(strucvector,field)
for i=1:length(strucvector)-1
low=i
for j=i+1:length(strucvector)
if eval(['strucvector(' num2str(j) ' ). ' field])<...
eval(['strucvector(' num2str(low) ' ). ' field])
low=j
end
end
temp=strucvector(i)
strucvector(i)=strucvector(low)
strucvector(low)=temp
end
else disp('wrong field')
end
sort=strucvector
Why cab't I write the part with eval like this:
if eval(['strucvector(num2str(j)).''field'])<...
eval(['strucvector(num2str(low)).''field'])
I know eval is often considered unhandy but it is part of curriculum
1 Comment
Daniel Shub
on 26 Oct 2011
The eval is only there because the curriculum is dated to before MATLAB handled dynamic field names.
Accepted Answer
More Answers (2)
Daniel Shub
on 26 Oct 2011
You cannot do
eval(['strucvector(num2str(j)).''field'])
because
['strucvector(num2str(j)).''field']
expands to a string of strucvector(num2str(j)).'field (notice the odd '). EVen if you eliminate the odd ', you won't get the correct answer.
strucvector(num2str(j)).field
will essentially do
strucvector(double(num2str(j))).field
which is not:
strucvector(j).xxx
where xxx is whatever string is contained in field.
That is why you cannot do what you want and the original version works.
Current versions of MATLAB all for
strucvector(j).(field)
Wayne King
on 26 Oct 2011
Hi Tor, Not sure why you want to use eval() here, but:
test = struct('data',randn(10,1));
for nn = 1:9
if (eval('test.data(nn) < test.data(nn+1)'))
disp('hi'); end
end
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!