Is there any way to set function (or method) output as comma separated list?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hyeokjin Jho
el 24 de Oct. de 2018
Comentada: Matt J
el 12 de En. de 2022
If we have an array of struct, like this:
s(1).a = 1;
s(2).a = 2;
s(3).a = 3;
and then if we get the field of this array, then the result would be like:
s.a
ans =
1
ans =
2
ans =
3
As I know, this output is comma separated list.
I want to have this behavior in my method output too, so that I can use my object just as how I use structs. Something like this:
classdef myObject
properties
myProp
end
methods
function this = myObject(input)
%constructor
this.myProp = input;
end
function output = myMethod(this)
% this function should return myProp as comma separated list
% when myObj array 'this' is given
% I don't know what to do here
% My best try:
% anyway the code below here obviously doesn't work...
output = {this(:).myProp}
end
end
and
myObj(1) = myObject('A');
myObj(2) = myObject('B');
myObj(3) = myObject('C');
myObj.myMethod
ans =
A
ans =
B
ans =
C
It would be cool, isn't it?
I tried varargout, but it only outputs explicit number of nargout, so if the output argument is not specified, it will give only one output, which is varargout{1}.
Is there any good way to do this?
2 comentarios
Respuesta aceptada
Matt J
el 24 de Oct. de 2018
Editada: Matt J
el 24 de Oct. de 2018
You should be able to do it by overloading numArgumentsFromSubscript. In other words, tell the class to interpret
>> myObj.myMethod(arg)
as a dot-indexing expression rather than a function call.
The hassle with this is that, similar to overloading subsref, you now have to explicitly implement code in the method to distinguish which dot-indexing expressions are function calls and which are actual indexings.
Más respuestas (1)
Hyeokjin Jho
el 12 de En. de 2022
2 comentarios
Matt J
el 12 de En. de 2022
Editada: Matt J
el 12 de En. de 2022
Yes, although I think the example would be clearer if MyDepProp performs some additional work that a class method might, e.g.,
methods
function output = get.myDepProp(this)
output = lower(this.myProp); % operates as singleton
end
end
>>myObj(1) = myObject('A');
>>myObj(2) = myObject('B');
>>myObj(3) = myObject('C');
>> myObj.myDepProp
ans =
'a'
ans =
'b'
ans =
'c'
Matt J
el 12 de En. de 2022
A limitation of this approach, of course, is that it does not allow the "method" to take additional input arguments.
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!