现在,我正在学习Perl 6; 我的第一个项目是创建一个HTTP客户端..我收到一个错误,我不明白为什么
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
Run Code Online (Sandbox Code Playgroud)
我认为它来自port变量,但我不确定这是我所有的perl6代码:
class Request
{
has $!method;
has $!path;
has $!version;
has @!headers;
has $!socket;
has $.response is rw;
method new(:$method, :$path, :$host, :$port, :$version = "HTTP/1.1")
{
my $socket = IO::Socket::INET.new(:$host, :$port);
return self.bless(:$method, :$path, :$version, :$socket);
}
submethod BUILD(:$!method, :$!path, :$!version, :$!socket){}
method setHeader($name, $value)
{
my %header = name => $name, value => $value;
@!headers.push({%header});
}
method toString
{
my $request = "$!method $!path $!version\r\n";
for @!headers -> %_ {
$request ~= %_{'name'} ~ ": " ~ %_{'value'} ~ "\r\n";
}
$request ~ "\r\n";
}
method send($i = 1)
{
say "Request send!";
$!socket.print($.toString());
say $!socket.recv for 0..$i;
}
}
my $host = "127.0.0.1";
my Int $port = 58002;
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
$request.setHeader("host", $host);
$request.setHeader("Accept-Language", "fr");
$request.send(2);
Run Code Online (Sandbox Code Playgroud)
这个答案可能没有帮助,可能很烦人,但我可以在今天晚些时候将其删除,如果是的话,这就是我所有的,我必须运行.
我不知道您是否理解错误消息,但我们先介绍一下.
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
Run Code Online (Sandbox Code Playgroud)
这意味着在执行消息的最后一行,代码的第43行,出现了问题:
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
Run Code Online (Sandbox Code Playgroud)
编译器注意到最后一行的执行涉及到代码中另一行的路径,第13行:
return self.bless(:$method, :$path, :$version, :$socket);
Run Code Online (Sandbox Code Playgroud)
这样有助于在执行错误的过程中更好地确定线路.
.bless
是方法调用.它被调用,self
它引用传递给方法的调用,你可以假设它是方法调用出现的类的对象,即你定义的类Request
.
您的代码没有指定Request
继承自(使用is
)的类,因此它继承自Any
.将bless
用于Any
从继承Mu
的.
这是Rakudo编译器中的代码:
method bless(*%attrinit) {
nqp::create(self).BUILDALL(Empty, %attrinit);
}
Run Code Online (Sandbox Code Playgroud)
因此,在执行该代码期间,Perl 6尝试读取某些UTF8,并在它尝试读取的某些数据的第一行的第45行遇到无效字符.
所以,在没有看到您的数据的情况下,我能说出最好的原因.
归档时间: |
|
查看次数: |
174 次 |
最近记录: |