gpt4 book ai didi

raku - 为什么我在调用 HTTP::Request.new 时得到 “Too many positionals passed…”?

转载 作者:行者123 更新时间:2023-12-04 20:12:21 28 4
gpt4 key购买 nike

我在这段代码上尝试了六种左右的变体,但硬编码的 Str 除外,例如 GET => … 我总是遇到这个错误。为什么?我该如何修复它并理解它?是 HTTP::Request 代码中的错误吗?

代码
#!/usr/bin/env perl6
use HTTP::UserAgent; # Installed today with panda, for HTTP::Request.

HTTP::Request.new( GET => "/this/is/fine" ).WHICH.say;

# First, check that yes, they are there.
say %*ENV<REQUEST_METHOD>, " ", %*ENV<REQUEST_URI>;

# This and single value or slice combination always errors-
HTTP::Request.new( %*ENV<REQUEST_METHOD>, %*ENV<REQUEST_URI> );
具有不变错误的输出
$ env REQUEST_METHOD=GET REQUEST_URI=/ SOQ.p6
HTTP::Request|140331166709152
GET /
Too many positionals passed; expected 1 argument but got 3
in method new at lib/HTTP/Request.pm6:13
in block <unit> at ./SOQ.p6:11

HTTP::请求来自这个包 — https://github.com/sergot/http-useragent/ — 谢谢!

最佳答案

尝试

HTTP::Request.new(|{ %*ENV<REQUEST_METHOD> => %*ENV<REQUEST_URI> });

而不是更明显

HTTP::Request.new( %*ENV<REQUEST_METHOD> => %*ENV<REQUEST_URI> );

如果 => 的左侧不是文字,我们将不会绑定(bind)到命名参数。相反,一对对象作为位置参数传递。

为了解决这个问题,我们构建了一个匿名散列,通过前缀 | 将其扁平化到参数列表中。

作为奖励,这里有一些更有创意的方法:

HTTP::Request.new(|%( %*ENV<REQUEST_METHOD REQUEST_URI> ));
HTTP::Request.new(|[=>] %*ENV<REQUEST_METHOD REQUEST_URI> );

关于raku - 为什么我在调用 HTTP::Request.new 时得到 “Too many positionals passed…”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313716/

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