我试图让深刻的强制工作Type::Tiny
没有任何成功.从手册中可以说:
"某些参数化类型约束可以自动获取强制,如果它们的参数有强制.例如:
ArrayRef[Int->plus_coercions(Num, q{int($_)}) ]
......做你的意思!"
我试图完成的是得到这样的"做我的意思":
package Person;
use Types::Standard -types;
use Moo;
has name => (is => 'ro', isa => Str);
package Family;
use Types::Standard -types;
use Moo;
has members => (is => 'ro', isa => ArrayRef[InstanceOf['Person']]);
package main;
my $family = Family->new(members => [
'mom',
Person->new(name => 'dad'),
Person->new(name => 'girl'),
'dog'
]);
Run Code Online (Sandbox Code Playgroud)
当Family
使用元素进行实例化时,Str
它们应该被自动强制转换为Person
对象.我尝试了一系列不同的想法(plus_coercions,类型库等),没有任何运气.他们都以同样的方式失败.
使用plus_coercions时(从Str
到Object
)
package Family;
has members => (
is => …
Run Code Online (Sandbox Code Playgroud) 我需要能够在Mojolicious :: Lite应用程序中编写和调用我自己的子例程.但是,这样做的直观方式似乎并不奏效.我通过电子邮件发送了一位比我对此问题有更多Mojolicious经验的同事,他给我发了以下代码:
#!/usr/bin/env perl
use Mojolicious::Lite;
# Documentation browser under "/perldoc"
plugin 'PODRenderer';
get '/' => sub {
my $self = shift;
$self->render('index');
};
sub factorial {
my $n = shift;
return $n ? $n * factorial($n - 1) : 1;
}
app->start;
__DATA__
@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!
Five factorial: <%= main::factorial(5) %>
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它告诉我当我调用一个未定义的子程序时:
未定义的子程序&main :: …