calling method (and sum'ing answer) on every class instance in a matrix

2 次查看(过去 30 天)
Hi, I asked a very similar question to this this morning for getting the sum of class properties in a matrix (cheers Daniel for the answer) but now I need to get the sum of method return values.
If I make a simple class;
MATLAB code
classdef ExampleClass < handle
methods
function obj = GetTotal(this)
%In real life this is a calculation that returns a value.
obj = 5;
end
end
end
And I make a collection of them;
MATLAB code
myCollection=[ExampleClass1; ExampleClass2; ExampleClass3; ExampleClass4];
Is there an easy way to get the sum of the GetTotal methods please? ie,
MATLAB code
sum([myCollection.GetTotal])
...would give 20?
Is it possible without making the method a dependent property?
Thanks for any help,
Tom.

采纳的回答

David Young
David Young 2011-11-30
sum(arrayfun(@(x) GetTotal(x), myCollection))

更多回答(1 个)

Daniel Shub
Daniel Shub 2011-11-30
Welcome to the joys of MATLAB OOP. While TMW will tell you that the array nature of the OOP system is a real plus, I find it a real pain to work with. Your options are to either limit your class to scalars (i.e., not allowing myCollection) or to write your own subsref. Something like:
function varargout = subsref(obj, S)
for ii = 1:numel(obj)
varargout{ii} = builtin('subsref', obj(ii), S);
end
end
is a reasonable starting point, but it quickly gets more complicated.

类别

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

标签

Community Treasure Hunt

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

Start Hunting!

Translated by