相关疑难解决方法(0)

有没有办法(隐式)删除 Raku 角色 mixin?

这个新问题是我之前提出的问题的后续问题,是在我充实内容时出现的。请注意,我也做了一些研究,并且有意识地避开了这里提到的 Scalar Mixins bug 。因此,我将角色混合到对象中,而不是标量容器中。

大局是进行数学运算,同时也执行简单的误差计算。

这是我的失败代码的简洁版本:

  1 role Error {       
  2     has $.abs-error 
  3 }   
  4 
  5 multi prefix:<-> ( Error:D $x ) is default {
  6     # - $x;                             # fails - enters an infinite loop 
  7     # - $x.Real;                        # fails - does not drop the Error mixin
  8     ( 0 - $x ) does Error($x.abs-error) # works - but relies on the infix:<-> form
  9 }
 10 
 11 my $dog = 12.5 does …
Run Code Online (Sandbox Code Playgroud)

units-of-measurement mixins raku

8
推荐指数
1
解决办法
116
查看次数

为混合角色的属性分配值

我正在尝试使用EnumerationPerl 6中角色的一个示例(作为修复文档问题的一部分,枚举角色未记录).我想出了这个简单的例子:

class DNA does Enumeration {
    my $DNAindex = 0;
    my %pairings = %( A => "T",
                      T => "A",
                      C => "G",
                      G => "T" );

    method new( $base-pair where "A" | "C" | "G" | "T" )  {
        self.bless( key => $base-pair,
                    value => %pairings{$base-pair},
                    index => 33);
    }

    multi method gist(::?CLASS:D:) {
        return "$!key -> $!value with $!index";
    }

}

for <A C G T>.roll( 16 ) -> $letter …
Run Code Online (Sandbox Code Playgroud)

mixins perl6

7
推荐指数
1
解决办法
92
查看次数

性状中的混合角色显然不起作用

这个例子是采取roast,虽然它已经有8年了:

role doc { has $.doc is rw }

multi trait_mod:<is>(Variable $a, :$docced!) {
    $a does doc.new(doc => $docced);
}

my $dog is docced('barks');
say $dog.VAR;
Run Code Online (Sandbox Code Playgroud)

这将返回Any,而不会混入任何角色。尽管特质不会出错,但显然没有办法进入“ doc”部分。任何的想法?

traits perl6

5
推荐指数
1
解决办法
115
查看次数

什么时候调用迭代器方法?

这个问题与其他关于使块可迭代的问题在同一个问题,但似乎揭示了mixins的一个不同问题(或者对我的语法有不同的误解).什么Iterable是使数据结构有效迭代,也就是说,你可以通过在它之前创建循环for.

Iterable用作对象的API,可以使用for构造和相关的迭代构造(如超运算符)进行迭代.

所以让我们尝试将其付诸实践:

 my &logger = -> $event  {
    state %store;
    if ( $event ) {
        %store{ DateTime.new( now ) } = $event;
    } else {
        %store;
    }
}

role Forable does Iterable {
    method iterator(&self:) {
        self( Nil );
    }
}

logger( "One" );
logger( "Two" );

&logger does Forable;

.say for &logger;
Run Code Online (Sandbox Code Playgroud)

这根本行不通; say应用于&logger一个简单的项目.但是,如果我们将最后一句改为:

.say for &logger.iterator;
Run Code Online (Sandbox Code Playgroud)

我猜这表明该角色实际上正在工作,并且混入.由于类型为&loggeris Block+{Forable},如果Iterable没有直接混合,它可能不起作用.事实上,does Iterable从 …

mixins perl6

4
推荐指数
2
解决办法
145
查看次数

标签 统计

mixins ×3

perl6 ×3

raku ×1

traits ×1

units-of-measurement ×1