I have reduced down to a small example some code that I have, which tests for whether a variable called class-name
has a value assigned to it:
ask-params: function [
config-file [file!]
default-class-name
default-fields
] [
probe value? 'class-name
input
either (value? 'class-name) [
probe class-name
] [
;-- omit code in this branch for now
]
]
ret-block: ask-params %simple-class.params.txt "Person" "First Name, Last Name"
The expression value? 'class-name
returns false here. On the other hand, if I fill in the missing branch with an assignment:
ask-params: function [
config-file [file!]
default-class-name
default-fields
] [
probe value? 'class-name
input
either (value? 'class-name) [
probe class-name
] [
class-name: default-class-name
]
]
ret-block: ask-params %simple-class.params.txt "Person" "First Name, Last Name"
This will return true for value? 'class-name
. But in this second case, class-name: default-class-name
isn't even executed yet.
I would think that class-name shouldn't exist in memory, so value? 'class-name
should be returning false. Why is value?
returning true instead?
You are using function
. This scans the body of the function and pre-creates the local variables for you, initialized to NONE. That's why value? 'class-name
becomes true (because NONE is a legal value for a variable, distinct from the situation of being "unset").
If you used func
instead, then both would return false.