Implementation of clear()

Ben Abbott bpabbott at mac.com
Wed Dec 26 08:23:36 CST 2007


On Dec 26, 2007, at 5:02 PM, Thomas Weber wrote:

> Am Mittwoch, den 26.12.2007, 11:20 +0800 schrieb Ben Abbott:
>> On Dec 26, 2007, at 3:53 AM, Thomas Weber wrote:
>>
>>> Hi,
>>>
>>> the current implementation of clear() tries to mimic the M* approach
>>> for
>>> a few arguments (namely all, functions, global, variables).
>>>
>>> I think it makes sense to add "exclusive" to this list. Consider the
>>> following (3.0.0):
>>>
>>> ==========================================
>>> octave3.0:25> a = 1; global b = 2;
>>> octave3.0:26> clear -exclusive b
>>> octave3.0:27> b,a
>>> b =  2
>>> error: `a' undefined near line 27 column 3
>>> ==========================================
>>> As expected, a is removed and b survives.
>>
>> This functionality would be useful for me. However, it might  
>> encourage
>> sloppy programming habits ... something I'm quite familiar with ;-)
>>
>>> ==========================================
>>> octave3.0:27> a = 1; global b = 2;
>>> octave3.0:28> clear exclusive b
>>> octave3.0:29> a,b
>>> a =  1
>>> error: `b' undefined near line 29 column 3
>>> ==========================================
>>> Now, "b" is removed and "a" survives, which I find highly  
>>> surprising.
>>
>> You've asked to clear variables "b" and "exclusive". Although
>> "exclusive" was not defined, there is no error in either Octave or
>> Matlab when this is done. Thus, it would be equivalent to type "clear
>> b", which would clear variable "b" and leave "a" as it was.
>
> The problem is that "exclusive" is specific compared with all other  
> long
> special names in that it makes a difference if I call it with or  
> without
> a dash:
>
> "clear all" or "clear -all" are equivalent, but
> "clear exclusive" or "clear -exclusive" aren't.

hmmm ... it depends. If a variable "all" exists then "clear all" and  
"clear -all" are not equivalent.

For example,  if "a", "b", and "all" are defined in matlab

	a = 1;
	b = 2;
	all = [a, b];

Then "clear all" only clears the variable "all", the variables "a" and  
"b" remain ... same with Octave

octave:4> clear -all
octave:5> a = 1;
octave:6> b = 2;
octave:7> all = [1,2];
octave:8> clear all
octave:9> who

*** dynamically linked functions:

dispatch

*** currently compiled functions:

pkg

*** local user variables:

__nargin__  a           b

There is much in Matlab that is supported for historical reasons. I  
suspect they would prefer to deprecate the "clear all" and require  
"clear -all".  Perhaps Octave's documentation should reflect that  
direction?  In which case your present implementation is fine.

In any event,  your current implementation respects the explicit  
syntax and ignores the implicit form. I'd be inclined to leave it  
alone, and encourage users to use the explicit form for "clear -all"  
as well.

Ben


-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://www.cae.wisc.edu/pipermail/octave-maintainers/attachments/20071226/8044f8dc/attachment.html 


More information about the Octave-maintainers mailing list