首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本中的匿名函数

文本中的匿名函数
EN

Stack Overflow用户
提问于 2022-10-05 12:56:54
回答 1查看 104关注 0票数 1

我有一些JavaScript,还有cl-谁做我想做的事:

代码语言:javascript
复制
      (:script :type "text/javascript"
           (cl-who:str
        "
$(document).ready(function ()
{$('#mtcars-table').DataTable({
ajax: { url: '/data?sym=mtcars&fmt=dt',
        dataSrc: 'mtcars' },
columns: [
{data: 'model', title: 'Model'},
{data: 'mpg', title: 'MPG'},
{data: 'cyl', title: 'Cylinders'},
{data: 'disp', title: 'Displacement'},
{data: 'hp', title: 'Horsepower'},
{data: 'drat', title: 'Axle Ratio'},
{data: 'wt', title: 'Weight'},
{data: 'qsec', title: 'Quarter mile time'},
{data: 'vs', title: 'V or Straight'},
{data: 'am', title: 'Transmission'},
{data: 'gear', title: '# gears'},
{data: 'carb', title: '# carbs'},
],
});
});
"))

但我正在为通过ParenScript将其转换为ParenScript而感到有些困难。目前,这似乎是我所需要的大部分工作:

代码语言:javascript
复制
      (:script :type "text/javascript"
           (cl-who:str
             (ps:ps (ps:chain ($ document)
                 (ready (lambda ()
                      (foo)))))

这让我觉得:

代码语言:javascript
复制
"$(document).ready(function () {
    __PS_MV_REG = [];
    return foo();
});"

从ParenScript开始,让foo替换为$(mtcars-table ...

不过,要达到这一点需要反复尝试,错误和猜测,而我对JavaScript知之甚少。我不相信我这样做是“正确的方式”,关于ParenScript的文档和教程也很少。

有专家能建议一个更好的方法来转换这个JavaScript片段吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-23 03:57:29

首先,虽然我通常不使用:use包(在defpackage中),但我单独制作了一个:use #:parenscript包,因为否则会很痛苦。

我使用了几个帮助程序来减少columns数组的输入(group在我个人的util库中,但我复制它是为了防止您需要它)。

代码语言:javascript
复制
(defun group (n seq)
  (if (zerop n)
      (error "0 length")
      (do ((result nil)
           (chunk nil nil))
          ((not seq) (nreverse result))
        (dotimes (i n)
          (push (car seq) chunk)
          (setf seq (cdr seq)))
        (push (nreverse chunk) result))))

(defmacro+ps temporary-columns (&body forms)
  `(array ,@ (mapcar (lambda (pair)
                       `(create data ,(first pair)
                                title ,(second pair)))
                     (group 2 forms))))

(ps
  (chain ($ document)
         (ready (lambda ()
                  (chain ($ "#mtcars-table")
                         (-data-table (create ajax (create url "/data?sym=mtcars&fmt=dt"
                                                           data-src "mtcars")
                                              columns (temporary-columns
                                                        "model" "Model"
                                                        "mpg" "MPG"
                                                        "cyl" "Cylinders"
                                                        "disp" "Displacement"
                                                        "hp" "Horsepower"
                                                        "drat" "Axle Ratio"
                                                        "wt" "Weight"
                                                        "qsec" "Quarter Mile Time"
                                                        "vs" "V or Straight"
                                                        "am" "Transmission"
                                                        "gear" "# gears"
                                                        "carb" "# carbs"))))))))

它扩展到:

代码语言:javascript
复制
$(document).ready(function () {
    __PS_MV_REG = [];
    return $('#mtcars-table').DataTable({ ajax : { url : '/data?sym=mtcars&fmt=dt', dataSrc : 'mtcars' }, columns : [{ data : 'model', title : 'Model' }, { data : 'mpg', title : 'MPG' }, { data : 'cyl', title : 'Cylinders' }, { data : 'disp', title : 'Displacement' }, { data : 'hp', title : 'Horsepower' }, { data : 'drat', title : 'Axle Ratio' }, { data : 'wt', title : 'Weight' }, { data : 'qsec', title : 'Quarter Mile Time' }, { data : 'vs', title : 'V or Straight' }, { data : 'am', title : 'Transmission' }, { data : 'gear', title : '# gears' }, { data : 'carb', title : '# carbs' }] });
});

不幸的是,用parenscript编写的代码看起来并不像惯用的通用lisp,因为它们的数据模型非常不同,为了与js生态系统的互操作性,您需要向js屈服。

尽管如此,我仍然更喜欢编写参与程序,因为宏仍然很有用,而且parenscript也会对js的一些可怕特性进行分析。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73960689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档