[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to share variables between functions
From: 
John W. Eaton 
Subject: 
Re: How to share variables between functions 
Date: 
Tue, 22 May 2007 17:20:42 0400 
On 22May2007, Chris Wagner wrote:
 John W. Eaton wrote:
 >
 >
 > With Octave 2.9.10, you can write
 >
 > function y = f (x)
 > y = quad (@(t) g (x, t), 0, 1);
 > endfunction
 > function y = g (x, t)
 > y = t*x;
 > endfunction
 >
 > jwe
 >
 >

 I may be missing something, but I can't seem to get the above anonymous
 function passing to work between multiple .m files.

 This seems to work (everything in one .m file):
 f2.m:
 function y = f2(x)
 y = f3(@(t) g(x,t), 1, 2);

 function y = g(x,t)
 y = t*x;

 function y = f3(infunc, a, b)
 y = infunc(a) + infunc(b);

 Then on the command line,
 octave:5> f2(5)
 ans = 15

 But with the function f3 in another .m file in the same directory:
 f2.m:
 function y = f2(x)
 y = f3(@(t) g(x,t), 1, 2);

 function y = g(x,t)
 y = t*x;

 f3.m:
 function y = f3(infunc, a, b)
 y = infunc(a) + infunc(b);

 And running on the command line:
 octave:7> f2(5)
 error: `g' undefined near line 2 column 15
 error: called from `?unknown?'
 error: evaluating binary operator `+' near line 2, column 20
 error: evaluating assignment expression near line 2, column 8
 error: called from `f3' in file `/home/cwagner/octavetest/f3.m'
 error: evaluating assignment expression near line 2, column 5
 error: called from `f2' in file `/home/cwagner/octavetest/f2.m'
 octave:7>

 Is this the expected behavior? I'm using Octave 2.9.11.
I think it should work.
Please try the following patch.
BTW, it is best to report bugs to the bugs list.
Thanks,
jwe
src/ChangeLog:
20070522 John W. Eaton <address@hidden>
* ptfcnhandle.cc (tree_anon_fcn_handle::rvalue):
Set current function as parent of anonymous function handle.
Index: src/ptfcnhandle.cc
===================================================================
RCS file: /cvs/octave/src/ptfcnhandle.cc,v
retrieving revision 1.7
diff u u r1.7 ptfcnhandle.cc
 src/ptfcnhandle.cc 6 Apr 2007 16:11:38 0000 1.7
+++ src/ptfcnhandle.cc 22 May 2007 21:19:57 0000
@@ 115,6 +115,11 @@
= new octave_user_function (new_param_list, new_ret_list,
new_cmd_list, new_sym_tab);
+ octave_function *curr_fcn = octave_call_stack::current ();
+
+ if (curr_fcn)
+ uf>stash_parent_fcn_name (curr_fcn>name ());
+
uf>mark_as_inline_function ();
octave_value ov_fcn (uf);