Error with function handles of object methods
WMennerich
W.Mennerich at gmx.net
Mon Jun 29 03:43:11 CDT 2009
Is there somebody where this problem can be reproduced?
With this bug, the complete cellfun/arrayfun stuff does not work
with function handles from object methods.
W.Mennerich
WMennerich wrote:
>
> Hello,
> I found a bug using objects:
> In short words: Function handles of object functions (methods) within
> the class directory (beginning with '@') can not be created.
>
> I use Octave V3.2.0 (mingw binary) on WindowsXP.
>
> I hope, this bug report contains enough details,
> otherwise just ask please.
>
>
> W.Mennerich
>
>
>
> In the following the tests I made:
>
>
>
>
>
> function test (<scalar>,<scalar>)
> [constructor in the '@test' directory
> *********************************
> function newtest=test(att1, att2)
> %constructor
>
> switch nargin
> case 0
> newtest.att1=[];
> newtest.att2=[];
> case 2
> newtest.att1=att1;
> newtest.att2=att1+att2;
> end
>
> newtest=class(newtest,'test');
> **********************************
>
>
> function sumAtts(<test>)
> [a method in the '@test' directory
> **********************************
> function res=sumAtts(this)
> res=this.att1+this.att2;
>
>
>
> function get(<test>,<string>)
> [for testing function overloading,
> also inside '@test']
> **********************************
> function att=get(this,nameAtt)
> att=this.(nameAtt);
>
>
>
> Test environment:
> ##################################
> ##################################
>
> * Create all files
>
> * Create '@test'
>
> * Put all files into '@test'
>
> * Put '@test' into octave path
>
>
>
> Running the tests:
> ##################################
> ##################################
>
> %Testing the class:
> %create three objects and put them into a cell array:
>
> mytest1=test(33,44)
> mytest2=test(66,88)
> mytest3=test(132,176)
>
> allmytests={mytest1 mytest2 mytest3}
>
>
> %Workspace of octave shows:
>
>
> Attr Name Size Bytes Class
> ==== ==== ==== ===== =====
> allmytests 1x3 48 cell
> mytest1 1x1 16 test
> mytest2 1x1 16 test
> mytest3 1x1 16 test
>
>
>
>
>
> %Testing of the sumAtts(<test>) function:
>
>> sumAtts(mytest1)
> ans = 110
>
>
>> sumAtts(mytest2)
> ans = 220
>
>
>> sumAtts(mytest3)
> ans = 440
>
>
>
>
>
>
> %Function 'sumAtts' as input of an anonymous function works:
>
>> cellfun(@(x) sumAtts(x),allmytests)
> ans =
>
> 110 220 440
>
>
>
> %Also the (overloaded) function 'get' works fine:
>> cellfun(@(x) get(x,'att1'),allmytests)
> ans =
>
> 33 66 132
>
>
> %Using cellfun with a sumAtts handle does not work:
>
>> cellfun(@sumAtts,allmytests)
> error: error creating function handle "@sumAtts"
> error: evaluating argument list element number 1
> error: error creating function handle "@sumAtts"
> error: evaluating argument list element number 1
>
>
> %The same also with overloaded 'get' function, gives another error:
>
>> inStrings={'att1' 'att1' 'att1'}
> inStrings =
>
> {
> [1,1] = att1
> [1,2] = att1
> [1,3] = att1
> }
>
>> cellfun(@get,allmytests,inStrings)
> error: octave_base_value::array_value(): wrong type argument `class'
> error: get: expecting graphics handle as first argument
>
>
>
>
> %Try to create a function handle outside of cellfun:
>
>> fun=@sumAtts
> error: error creating function handle "@sumAtts"
>
> %Non-class-functions work as handle:
>
>> h=@rand
> h =
>
> rand
>
>
>> h(4)
> ans =
>
> 0.86496 0.62121 0.37157 0.41806
> 0.51272 0.49135 0.41006 0.67037
> 0.64824 0.25499 0.91680 0.27943
> 0.42406 0.77885 0.16088 0.15369
>
>
>
>
> %Workspace of octave shows:
>
> Attr Name Size Bytes Class
> ==== ==== ==== ===== =====
> allmytests 1x3 48 cell
> h 1x1 0 function_handle
> inStrings 1x3 12 cell
> mytest1 1x1 16 test
> mytest2 1x1 16 test
> mytest3 1x1 16 test
>
>
>
> I checked also creating handles from selfwritten functions like e.g. foo.m
> this works also fine. Just creating handles from functions which belong to
> a user-class (i.e. they are here in the @test directory fail as handle)
>
--
View this message in context: http://www.nabble.com/Error-with-function-handles-of-object-methods-tp24185732p24250428.html
Sent from the Octave - Bugs mailing list archive at Nabble.com.
More information about the Bug-octave
mailing list