gpt4 book ai didi

parameters - 无法传递从命令行参数解析的函数参数

转载 作者:行者123 更新时间:2023-12-02 00:35:59 25 4
gpt4 key购买 nike

我有一个使用 Drakma 获取网页的函数:

(defun scrape ()
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
(drakma:http-request "http://www.example.com/account/login"
:method :post
:parameters '(("username" . "myusername")
("password" . "mypassword"))
:cookie-jar cookie-jar)
(setq body (drakma:http-request "http://www.example.com/"
:cookie-jar cookie-jar))
(format t body)))

这正如我所料。但是,如果我像这样参数化用户名和密码:

(defun scrape (username password)
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
(drakma:http-request "http://www.example.com/account/login"
:method :post
:parameters '(("username" . username)
("password" . password))
:cookie-jar cookie-jar)
(setq body (drakma:http-request "http://www.example.com/"
:cookie-jar cookie-jar))
(format t body)))

... 并像这样调用它:

(scrape "my_username" "my_password")

...然后我得到以下错误:

*** - Don't know what to do with name/value pair ("username" . USERNAME) in multipart/form-data body.

我是 Lisp 的新手,所以我 100% 确定我在这里遗漏了一些非常简单的参数处理方法。例如。如果我向抓取函数添加对格式的调用,我可以看到用户名被正确传递。

最佳答案

当您使用引号创建文字列表时,引号会向下延伸以禁止对列表的所有成员求值。您可以看到 username 在打印出来时是如何变成大写的,这是读取符号的默认值。

您必须根据需要使用 LIST 和 CONS 形式构建列表结构,或者使用允许您有选择地评估片段的反引号,即

(list (cons "username" username)      (cons "password" password))

`(("username" . ,username)  ("password" . ,password))

关于parameters - 无法传递从命令行参数解析的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4581601/

25 4 0