Is UNSET allowed normally as an argument?
Currently in R3, you can type:
>> form ()
== "!unset?!"
This means FORM accepts UNSET as an argument. But, should it?
The definition of UNSET is the value of an variable or expression when it has no value.
For example, the unset variable below returns false when tested for a value:
>> value? 'a-variable
== false
In general, UNSET is intended to throw errors to avoid proceeding too far in evaluation without detecting the missing value.
Currently, in R3 UNSET is allowed as a value for any function argument. It can be seen here:
>> f: func [a] [print :a]
>> f ()
== "unset!"
So, UNSET is being passed as an argument to the function.
But, in R2, to pass UNSET, you had to explicitly specify it in the function's arguments:
f: func [a [integer! unset!]] ...
or,
f: func [a [any-value!]] ...
This allows UNSET to be passed; otherwise, it will generate an error (and it is a useful error at the function interface level, because we can tell the user what is missing, as in "argument a has no value").
That seems like the correct behavior (R2)... but what are your thoughts on it?
6 Comments
|