2015-02-04 6 views
3

나는이 코드에서 여섯 가지 변형을 시도했으나 하드 코딩 된 코드는 Str이다. GET => … 나는 항상이 오류가있다. 왜? 어떻게 수정하고 이해할 수 있습니까? HTTP :: Request 코드의 버그입니까? 불변의 오류와HTTP :: Request.new에 대한 호출에서 "지나치게 많은 포지션이 전달되었습니다."

코드
#!/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/ - 감사합니다! =>의 왼쪽은 문자가 아닌 경우

+1

이 마지막 줄은'HTTP : Request.new (% * ENV => % * ENV를 읽을해야 :

는 보너스로, 여기에 그것을 할 좀 더 창조적 인 방법이다 ); Perl6에서'=>'는 쉼표가 아닌 설탕이 아니지만, 쌍 생성자 – Christoph

+0

@Christoph, 고맙습니다.하지만 같은 오류로 실패한 많은 변형 중 하나입니다. 그냥 두 번 확인 했어. : | – Ashley

답변

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>); 
+0

그게 효과가있어, 고마워. 나는 규칙적인/누드 쉼표와 조각 버전이 Just Work ™을 좋아하지 않는다는 것을 싫어합니다 ... – Ashley