[
https://issues.apache.org/jira/browse/JEXL-307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16942960#comment-16942960
]
Henri Biestro commented on JEXL-307:
------------------------------------
You nailed it, the local variable *shadow* scope is the issue.
However, after a local var definition scope block, allowing the same symbol
(aka variable name) to refer to a global might indeed _mask_ cases where the
intent was to dereference that local (out of scope / undefined). The analogy
with Java local/instance variable applies; it is very confusing indeed ! Good
practise (and Java code checkers) frown upon shadowing an instance var with a
local for the very reason it is an easy bug generator.
We do have the opportunity to be a bit strict and make a simple rule; no local
symbol will shadow a global var. Locals (defined or not) remain locals within a
script.
We may control that behaviour with another option flag (shadow) if this is
really (really) desirable keeping in mind simplicity trumps complexity and its
surprises...
> Variable redeclaration option
> -----------------------------
>
> Key: JEXL-307
> URL: https://issues.apache.org/jira/browse/JEXL-307
> Project: Commons JEXL
> Issue Type: New Feature
> Affects Versions: 3.1
> Reporter: Dmitri Blinov
> Assignee: Henri Biestro
> Priority: Minor
> Fix For: 3.2
>
>
> As of now, JEXL allows a script writer to redeclare a local variable during
> script evaluation.
> {code:java}
> var a = 1; var a = 2;{code}
> This may lead to potential errors with misspelled names and clashed
> variables. Checking for already defined variable is a common feature of many
> languages. This feature can be implemented in JEXL as an additional option of
> JexlFeatures class, enabled by default, thus allowing compatibility with
> existing code.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)