How to use the OO features of Octave

David Bateman adb014 at gmail.com
Tue Sep 23 16:08:04 CDT 2008


David Bateman wrote:
> David Bateman wrote:
>> John W. Eaton wrote:
>> >
>> >      args(2) = num_indices;
>> >      args(1) = index_position;
>> >      args(0) = *indexed_object;
>>
>>
>> shouldn't args(1) be
>>
>> args(1) = index_position + 1;
>>
>> due to the 1-based indexing of Octave?
>>
>> D.
>>
>>
> Also shouldn't we subtract one from the return value of the feval call?
> 
> D.
> 
> 

Ok, I see the return value should be minus one, but index_pos definitely 
needs to be. As far as I can see a pretty generic NDArray end method 
would look like


function r = end (obj, index_pos, num_indices)
   ++index_pos;
   dv = size (obj.x);
   for i = num_indices + 1 : length (dv)
     dv(num_indices) *= dv(i);
   endfor
   if (index_pos < length (dv))
     r = dv (index_pos);
   elseif
     r = 1;
   endif
endfunction


though the "++index_pos;" should go away if F__end__ was adapted to pass 
"index_pos + 1". However, this doesn't work correctly with the toy class 
What I see is

a = gf (floor(4*rand(3,3,2)),2);

a(1,1:end)

ans =
GF(2^2) array. Primitive Polynomial = D^2+D+1 (decimal 7)

Array elements =

0

and

a(1,1,1:end)

ans =
GF(2^2) array. Primitive Polynomial = D^2+D+1 (decimal 7)

Array elements =

0

Not sure what is going wrong but the first of the above should produce 6 
elements and the second 2 elements, but both produce 1. Any ideas?

On a related note "a(:)" on the class object works correctly, but 
"a(1,:)" and "a(:,1)" etc don't

D.




More information about the Octave-maintainers mailing list