[ 
https://issues.apache.org/jira/browse/JEXL-200?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15339956#comment-15339956
 ] 

Dmitri Blinov edited comment on JEXL-200 at 6/20/16 5:22 PM:
-------------------------------------------------------------

As for dedicated syntax - I'm also in favour of reusing existing syntax where 
appropriate, so I tried to propose as little new keywords and operators as 
possible, for the whole thing to resemble ordinary function declaration. The 
only problem is that I don't know how far existing syntax can be adopted for 
this in terms of grammar parsing rules etc. If the same thing can be done 
without any new grammar, for example like this:

{code}
var x = function(y) -> "return y+2";
{code} 

Then it will suffice, I do not insist on any particular form.

As for your example, I've got the idea I could wrap the script with {code} (x) 
-> { .... } {code} brackets to explicitly define parameters for the script, and 
it gives me almost everything I need at the moment, but for the sake of 
argument, compared to locally declared functions it will be a "top-level" 
function which cannot see and bind to any local variables aside its parameters 
and top-level context variables. It may be not bad in some use-cases, but using 
local variables can be essential for mimicking output parameters, as these 
variables are writeable. So it is not a 100% replacement.



was (Author: dmitri_blinov):
As for dedicated syntax - I'm also in favour of reusing existing syntax where 
appropriate, so I tried to propose as little new keywords and operators as 
possible, for the whole thing to resemble ordinary function declaration. The 
only problem is that I don't know how far existing syntax can be adopted for 
this in terms of grammar parsing rules etc. If the same thing can be done 
without any new grammar, for example like this:

{code}
var x = function(y) -> "return y+2";
{code} 

Then it will suffice, I do not insist on any particular form.

As for your example, I've got the idea I could wrap the script with {code} (x) 
-> { .... } {code} brackets to explicitly define parameters for the script, and 
it gives me almost everything I need at the moment, but for the sake of 
argument, compared to locally declared functions it will be a "top-level" 
function which cannot see and bind to any local variables aside its parameters 
and top-level context variables. It may not bad in some use-cases, but using 
local variables can be essential for mimicking output parameters, as these 
variables are writeable. So it is not a 100% replacement.


> Support for dynamic scripting in jexl scripts
> ---------------------------------------------
>
>                 Key: JEXL-200
>                 URL: https://issues.apache.org/jira/browse/JEXL-200
>             Project: Commons JEXL
>          Issue Type: New Feature
>    Affects Versions: 3.0
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>            Priority: Minor
>
> Allow for dynamically defined functions inside a script where the definition 
> of the function comes from a string expression, for example:
> {code}
> var x = function(y) => "return y+2";
> {code}
> the defined function should be accessible after its definition is 
> successfully parsed as ordinary function, and can be evaluated in the current 
> context.
> {code}
> if (x(40) eq 42) {...
> {code}
> I think the idea of dynamic script evaluation is not unusual, and though to 
> some extent can be implemented via side-added functions like *eval(expr)* a 
> dedicated syntax for this will benefit from the simplicity of ordinal 
> functions and the ability to control mapping of the arguments between a 
> caller and the defined function.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to