为什么在这次对HTTP :: Request.new的调用中收到“传递的位置过多…”

问题描述 投票:3回答:1

我在此代码上尝试了六种左右的变体,除了像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 :: Request来自此程序包-https://github.com/sergot/http-useragent/-谢谢!

perl6 raku
1个回答
4
投票

尝试

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

而不是更明显的

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

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

要解决此问题,我们构造了一个匿名哈希,该哈希通过前缀|展平到参数列表中。

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

HTTP::Request.new(|%( %*ENV<REQUEST_METHOD REQUEST_URI> ));
HTTP::Request.new(|[=>] %*ENV<REQUEST_METHOD REQUEST_URI> );
© www.soinside.com 2019 - 2024. All rights reserved.