Thank you for your suggestion. I should work. And I may also use a variable name for "x" that isn't possible to conflict (use gensym). So, yes, there are ways to work around this issue. But I learnt that "let over lambda" in parenscript is different from that in common lisp. Is that right?
The reason why I want need this is that I have to pass the whole object as argument to a library function. Many js libraries seem like to use object as configuration argument.
On Thu, Oct 13, 2011 at 3:13 PM, Vsevolod Dyomkin vseloved@gmail.com wrote:
I suggest, that you first consider, how would you do that in JS. You'll need to wrap that in functions: { 'fn_1' : (function () { var x = 1; return function () { return x; } }) (), 'fn_2' : (function () { var x = 2; return function () { return x; } }) () } Now let's think, how this can be done in Parenscript?.. PS. But the most important question is: why do you need to create a single function, that closes over a "private" variable, as part of an object? Isn't it equivalent to just coding the value of the variable inside the function? vsevolod
On Thu, Oct 13, 2011 at 10:05 AM, Canhua dreameration@gmail.com wrote:
actually what I want to achieve is something like this: (create "fn_1" (let ((x)) #'(lambda () x)) "fn_2" (let ((x)) #'(lambda () x))) and I expected these two "x" are lexical-scope separate and so independent from each other. However the compiled js code doesn't work as I expected.
On Thu, Oct 13, 2011 at 2:51 PM, Vsevolod Dyomkin vseloved@gmail.com wrote:
Hi Actually the above code is correct. You can also use:
- either
(let (x) (create "fn" (lambda () x)))
- or
(create "x" nil "fn" (lambda () x))) depending on the JS semantics you want to get. vsevolod
On Thu, Oct 13, 2011 at 8:40 AM, Canhua dreameration@gmail.com wrote:
hi, all, I found that (create "fn" (let ((x)) (lambda () x)))
compiles to { 'fn' : (x = null, function () { return x; }) }
wherein the variable x may conflict with a variable with the same name outside this code. How may avoid this? How may I achieve "let over lambda" closure effect as in common lisp?
Thanks.
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel