【问题标题】:Where can I learn about perl6 Type variables (::T)我在哪里可以了解 perl6 类型变量 (::T)
【发布时间】:2018-06-08 21:08:37
【问题描述】:

我需要使用 perl6 类型的变量。看来权威手册在这里http://www.jnthn.net/papers/2008-yapc-eu-perl6types.pdf,简明扼要且非常有用。

有没有更全面更权威的可以指点一下?

【问题讨论】:

  • 这既不是权威也不是手册,这是 10 年前演示文稿的幻灯片(所以它可能已经过时了)。 docs.perl6.org 看起来像官方文档。至于类型:docs.perl6.org/language/typesystem.
  • 我看了看,好奇它有多过时,并惊讶地发现——除了关于尚未实施的事情的注释——它仍然大部分是正确的。不过,同意它既不是权威的也不是手册。 :-)
  • 是的 - 抱歉应该将其标记为“我唯一能挖掘出来的东西”而不是脸颊上的舌头“权威手册”;-)......不过它对我有用并且一直存在时间的考验
  • 我非常喜欢书籍,建议深入阅读“Perl 6 Deep Dive”(packtpub.com/application-development/perl-6-deep-dive),尤其是第 51 页,以及“使用变量和工作”一章中的“类型变量”内置数据类型”,用相当容易理解的语言解释了变量类型和更多内容。顺便说一句,“Think Perl 6”(safaribooksonline.com/library/view/think-perl-6/9781491980545)也是如此,它的第二章是:“变量、表达式和语句”。同样在第 239 页以及关于制作自己的类型的一章,“Programm
  • 我也喜欢书籍——也许这是 perl 的东西......一些很棒的技巧,是的,Think Perl6 已经在我的图书馆里了。

标签: raku


【解决方案1】:

我喜欢这样想,Int 真的是 ::Int 的缩写。

所以大多数时候你在谈论一个类型,你可以在它的前面加上::

确实,如果您有一个字符串并且您想使用它来获取与您使用的短名称相同的类型::(…)

my $type-name = 'Int';
say 42 ~~ ::($type-name); # True

问题是在签名中使用类型已经用于指示参数属于该类型。

->   Int $_   {…}

签名中的任何 unsigiled 标识符都如上所示,因此如果没有 foo 类型,则以下将引发错误。

->   foo   {…}

在上述情况下,您可能希望 foo 成为一个无符号变量。所以你必须在前面添加一个\。 (在块内你只需使用foo。)

->   \foo   {…}

因此,如果您想在捕获类型的位置添加功能,则必须做一些不同的事情,而不仅仅是使用标识符。所以显然选择了在前面添加::

->   ::foo   { say foo }

如果您使用号码42 调用它,它将打印(Int)


你可以结合这些

-> Real ::Type \Value {…}

上面只接受一个实数(除复数之外的所有数字),将类型别名为Type,并将数字别名为Value

sub example ( Real ::Type \Value ) {
  my Type $var = Value;

  say Type;
  say Value;
}
> example 42;
(Int)
42

> example ''
Type check failed in binding to parameter 'Value'; expected Real but got Str ("")
  in block <unit> at <unknown file> line 1

> example 42e0
(Num)
42

这也用于角色。

role Foo[ Real ::Type \Value ] {
  has Type $.foo = Value; # constrained to the same type as Value
}
class Example does Foo[42] {}

say Example.new( :foo(128) ).foo; # 128
say Example.new().foo;            # 42

say Example.new( :foo(1e0) );     # Type check error

您当然可以省略任何不需要的部分。

role Foo[::Type] {…}

【讨论】:

  • 感谢 Brad 将这一个或两个级别提高了 - 这对于像我这样试图从“肉+土豆”编码 [aka perl6 很棒] 开始的人来说非常鼓舞人心。
【解决方案2】:

您所指的是 perl6 中的“类型捕获”,这里有两页关于它们:

希望有帮助!

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2013-01-23
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多