From help-octave-request at bevo dot che dot wisc dot edu Tue Jan 20 22:33:32 1998 Subject: exist gotcha? (was Re: Re: How to tell a function from a string) From: "John W. Eaton" To: king at cogsci dot ucsd dot edu (Jonathan King) Cc: help-octave at bevo dot che dot wisc dot edu, bug-octave@bevo.che.wisc.edu Date: Tue, 20 Jan 1998 22:32:05 -0600 On 20-Jan-1998, Jonathan King wrote: | I see one other "gotcha", as suggested by the following octave session: | | mk26:~/matlab> octave | Octave, version 2.0.9 (i586-pc-linux-gnu). | Copyright (C) 1996, 1997 John W. Eaton. | This is free software with ABSOLUTELY NO WARRANTY. | For details, type `warranty'. | | octave.bin:1> exist("who") % this will return 5, like it should | ans = 5 | octave.bin:2> % here's a stupid typo and its parse error | octave.bin:2> exist(who) | parse error: | | >>> exist(who) | ^ | | octave.bin:2> exist("who") % now this will fail... | ans = 0 | octave.bin:3> who % until you use it correctly... | octave.bin:4> exist("who") % and now it works again | ans = 5 | | I'm not sure what's going on here, but it looks funny. Yup. Please try the following patch. Thanks, jwe Tue Jan 20 17:02:19 1998 John W. Eaton * variables.cc (Fexist): If local symbol is undefined, check global table. *** src/variables.cc~ Tue Jan 13 13:03:12 1998 --- src/variables.cc Tue Jan 20 22:26:58 1998 *************** *** 351,357 **** } symbol_record *sr = curr_sym_tab->lookup (symbol_name, 0, 0); ! if (! sr) sr = global_sym_tab->lookup (symbol_name, 0, 0); retval = 0.0; --- 351,357 ---- } symbol_record *sr = curr_sym_tab->lookup (symbol_name, 0, 0); ! if (! (sr && sr->is_defined ())) sr = global_sym_tab->lookup (symbol_name, 0, 0); retval = 0.0;