commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitri Blinov (Jira)" <>
Subject [jira] [Commented] (JEXL-307) Variable redeclaration option
Date Wed, 02 Oct 2019 11:56:00 GMT


Dmitri Blinov commented on JEXL-307:

My understanding on globals with regard to this task is to keep things simple - we now have
global variables and local variables. I think we are now discussing about visibility and declaration
rules of *local* variables, as a result of new feature. So, any changes to global variables
are off the table at the moment. In essence, if a symbol is used as a parameter or local variable
in a script, it *shadows* a global, if such exists. This is what current implementation is
look like, and this is how new feature IMO should work. With new feature, if a local comes
out of its visibility scope, it simply no longer *shadows* a global. In my head, this is in
strict analogy with java instance variables and local variables. Our globals are like java
instance variables, and our locals are java local variables. Note that this is a little different
from javascript block variable scope, where one can redeclare local variables within nested
scope with `let` as much as he wants.

var  x = 10;
// Here x is 10
  let x = 2;
  // Here x is 2
     let x = 3;
     // Here x is 3
  // Here x is 2 once again
// Here x is 10

Since we think that 
var  x = 10;
// Here x is 10
  // Error - local variable redeclaration is not allowed
  var x = 2;

I do not say that there is nothing good to be done with globals with respect to other needs,
but for the sake of simplicity and understanding it is good to have variable model that has
analogy with well-known implementation.

PS. About pragmas - what do you mean by point of impact of pragma?

> Variable redeclaration option
> -----------------------------
>                 Key: JEXL-307
>                 URL:
>             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

View raw message