gpt4 book ai didi

types - 位置参数的类型捕获

转载 作者:行者123 更新时间:2023-12-04 19:25:48 24 4
gpt4 key购买 nike

即使是一些简单的东西,类型捕获也是一个很酷的东西:

sub assert-same(::T $a, T $b) { ; }

assert-same 1, 2; # silent
assert-same 1, "a"; # type check error

然而,结果对于位置来说是不直观的。如果我有以下签名
sub foo(Str @bar, Str @xyz) { ; }

然后 @bar是一个位置,其元素必须是 Str , 原样 @xyz .但是如果我使用类型捕获,事情就会变得很奇怪:
sub assert-same(::T @a, T @b) { ; }

my Str @x = <i j>;
my Str @y = <x y>;

assert-same @x, @y;
# Type check failed in binding to parameter '@b';
# expected Positional[Array[Str]] but got Array[Str] (Array[Str].new("x", "y"))

似乎第一种类型的捕获是通过 .WHAT 捕获的。 (这对标量有意义)而不是 .of对我来说,这是位置的直观感觉,因为只有在 .of 时才能立即重用捕获。原来是用的。

这闻起来像是一个错误,但如果是设计使然,有没有办法通过类型捕获来强制两个类型化的位置具有相同类型的元素?同时,我可以使用
sub assert-same(::T @a, @b where .all ~~ @a.of ) { ; }

my Str @x = <a b c>;
my Str @y = <x y z>;
my Int @i = 1,2,3;
assert-same @x, @y; # silent
assert-same @x, @i; # type check

但这似乎有点傻。

最佳答案

我认为这方面潜伏着许多错误。我几周前发布了这些:

  • (::T $, T @) yields "Internal error: inconsistent bind result"
  • sub foo (::T $, Array[T] $) { }; foo Int, Array[Int] yields "expected Array[T] but got Array[Int]" ;

  • 在发布它们之前,我搜索了 RT 和 GH rakudo 问题队列。在后者中,我提到了“cf#2595 和其他 type capture 错误”。也许它已经在那里了;如果没有,请添加一个问题。 TIA。

    关于types - 位置参数的类型捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57575606/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com