gpt4 book ai didi

raku - 角色错误 "currying"

转载 作者:行者123 更新时间:2023-12-04 10:06:27 24 4
gpt4 key购买 nike

在 Perl 6 世界中,currying 是表示部分实例化的通用术语,它也用于 (parametrized) roles 的世界。 .

但是,尚不清楚如何实际使用它:

role Zipi[::T] {};
class Zape does Zipi[::T] {}
No such symbol T 的错误;如果我们简单地使用 T声明类时,但在本例中为 Undeclared name .消除方括号及其内容产生 No appropriate parametric role variant available for 'Zipi' ,与将方括号留空相同。似乎有一个(有点) bug report going back to 2012 , 当然这些例子直接取自 the source code of CurriedRolehow .
知道这最终将如何工作,或者是否可以通过仅实例化角色的一些参数来 curry 参数化角色?

最佳答案

CurriedRoleHOW元类代表一个角色,比如说R ,已经给了一些参数,例如R[Int,Str] .从某种意义上说,角色总是有一个隐式的第一个参数,这是它最终组成的类,因此它拥有 RInt,Str参数,然后在角色实例化时(组合时间)注入(inject)它们。

一个人当然不能写:

class Zape does Zipi[::T] {}

并期望它做任何合理的事情; ::T是类型捕获,因此只能进入签名。在这里,它被用作实例化角色的参数,并且被正确地提示。此外, class永远是具体的东西,而不是一般的东西。

但是,可以使用类型变量对角色进行柯里化(Currying)以供以后实例化。给定一个具有两个类型参数的角色:
role RA[::T, ::U] {
method t { T }
method u { U }
}

我们可以编写另一个角色来修复一个并传递另一个角色:
role RB[::T] does RA[T, Int] { }

然后像这样使用它:
class C does RB[Str] { }
say C.t;
say C.u;

哪个有输出:
(Str)
(Int)

在本例中, RA[T, Int]也由 CurriedRoleHOW 建模元类,除了这次它有洞 T以及隐含的 ::?CLASS ,我相信这可以实现您的要求。

关于raku - 角色错误 "currying",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663187/

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