gpt4 book ai didi

programming-languages - 您可以使用哪些语言即时动态重写函数?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:12 25 4
gpt4 key购买 nike

我最近有必要在 javascript 中动态地重写一个 javascript 函数。我做起来的轻松和乐趣让我震惊。

我这里有一些 HTML:

<div id="excelExport1234" 
onclick="if(somestuff) location.href='http://server/excelExport.aspx?id=56789&something=else'; else alert('not important');"
>Click here to export to excel</div>

而且我无法更改输出的 HTML,但我需要向该链接添加一个额外的参数。我开始考虑它,并意识到我可以这样做:

excelExport = $('excelExport1234');
if (needParam)
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("excelReport.aspx?id", "excelReport.aspx?extraParam=true&id") + ';');
else
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("extraParam=true&", "") + ';');

而且效果非常好! excelExport.onclick 返回一个函数对象,我将其转换为字符串,并对其进行一些字符串操作。由于现在是“function() { ... }”的形式,我直接回去赋值给dom对象的onclick事件。不得不使用 eval 有点难看,但据我所知,没有一个 javascript 函数构造函数可以接受一串代码并将其很好地转换为对象。

无论如何,我的意思不是我 super 聪明(我不是),我的意思是这很酷。而且我知道 javascript 不是唯一可以做到这一点的语言。我听说 lisp 多年来一直为此目的使用宏。除了真正理解宏,你需要真正理解 lisp,而我不理解它,我只是“有点明白”。

所以我的问题是:您可以使用哪些其他语言(轻松)动态重写函数,您能给我一个简单的示例吗?我想看看您还可以在哪些地方这样做,以及如何做到这一点完成了!

(另外,我不知道该标记什么,所以我随机猜测)

最佳答案

LISP 是这方面的终极语言。 LISP 函数是实际的 LISP 列表,这意味着您可以像处理任何其他数据结构一样处理 LISP 源代码。

这是一个非常简单的例子来说明它是如何工作的:

(define hi 
(lambda () (display "Hello World\n")))
;; Displays Hello World
(hi)
(set! hi
(lambda () (display "Hola World\n")))
;; Displays Hola World
(hi)

然而,这在函数是一流对象的任何语言中都是可能的。这种 LISP 语法的强大功能最有趣的展示之一是它的宏系统。我真的觉得我不能公正地讨论这个话题,所以如果您有兴趣,请阅读这些链接:

http://en.wikipedia.org/wiki/Macro_(computer_science)#Lisp_macros

http://cl-cookbook.sourceforge.net/macros.html

关于programming-languages - 您可以使用哪些语言即时动态重写函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1119387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com