help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Built-in Functions inside method of a class


From: Juan Pablo Carbajal
Subject: Built-in Functions inside method of a class
Date: Sun, 9 Oct 2011 05:30:17 +0200

Hi,

Are built in functions called inside a method of a class considered as
friends (as in C++) of that class?
In other words: Will the function be evaluated in the context of the
caller or in the context of the method.

I have a class with a field 'Path' that is a structure with many
fields inside. I have a method that is meant to return a cell
containing information inside those subfields. The following code
works correctly

wanted_ids = {ids{tf}};
for i = 1: numel (wanted_ids)
     paths{i} = obj.Path.(ids{i}).data;
end

by returning the cell with the contents of the subfields of Path
described in 'wanted_ids'.

However any of the following doesn't work
% Variation
paths = cellfun (@(s) obj.Path.(s).data,wanted_ids,'UniformOutput',false);
% Another variation
paths = cellfun (@(s) getfield (obj,'Path').(s).data,
wanted_ids,'UniformOutput',false);
% Yet another
paths = cellfun (@(s) getfield (obj.Path,s).data,
wanted_ids,'UniformOutput',false);
% Yet yet another
dummy = @(s) obj.Path.(s).data;
paths = cellfun (dummy, wanted_ids,'UniformOutput',false);

The error says that the class cannot by indexed with 'Path'. If one
manually gives this interface to the class, by defining a case in
subref 'Path' the problem is solved. However, this breaks the privacy
of the class field 'Path', that is not meant to be accessed directly.

Is there any way of solving this without making Path public?
Equivalently, can one define functions "friend" of a class?

Thanks

-- 
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Zürich
http://ailab.ifi.uzh.ch/carbajal/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]