加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

一个perl6模块可以有条件地“使用”另一个perl6模块吗?

发布时间:2020-12-15 21:44:45 所属栏目:大数据 来源:网络整理
导读:是否有一种合理的方法让一个perl6模块检查是否存在另一个perl6模块,并且当且仅当它被安装时才“使用”它? 像这样…… module Polygons;if $available { use Measure; #only if Measure is installed}class Rectangle is export { has $.width; has $.height
是否有一种合理的方法让一个perl6模块检查是否存在另一个perl6模块,并且当且仅当它被安装时才“使用”它?

像这样……

module Polygons;

if $available {
    use Measure;                #only if Measure is installed
}

class Rectangle is export {
    has $.width;
    has $.height;

    method area {
        $!width * $!height;     #provides operator overload for Measure * Measure
    }
}
#====================

module Measure;

class Measure is export {
    has $.value;
    has $.unit;

    method Real {
        $!value;
    }
    method Str {
        "$!value $!unit";
    }
    method multiply( $argument ) {
        my $result = $.;
        $result.value = $!value * $argument;
        $result.unit  = "$!unit2";
        return $result;
    }
}

multi infix:<*> ( Measure:D $left,Measure:D $right ) is export {
    return $result.multiply( $argument );
}

#====================

#main.p6

use Polygons;
use Measure;

my $x = Measure.new( value => 10,unit => 'm' );
my $y = Measure.new( value => 20,unit => 'm' );

my $rect = Rectangle.new( width => $x,height => y );
say $rect.area;        #'200 m2'

我们的想法是传播运算符重载(在这种情况下为infix:< *>)备份类继承,以便在属性中存储更复杂的对象.

(请不要撕毁排水沟 – 因为我怀疑总有办法!)

解决方法

所以这个答案的第一个版本基本没用.

这是我提出的第一个与我理解你的问题有关的新东西.我还没试过回购.

在文件a-module.pm6中:

unit module a-module;
our sub infix:<*> ($l,$r) { $l + $r } }

我们的意思是,如果我们可以要求它,我们将能够看到这个例程,尽管它只能通过其完全限定的名称和& a-module :: infix:< *>来显示.

然后在一个使用文件中:

use lib '.';
try require a-module;
my &infix:<*> = &a-module::infix:<*> // &OUTER::infix:<*>;
say 1 * 2 # 2 or 3 depending on whether `a-module.pm6` is found

如果缺少模块,则使用的默认例程可以是OUTER(如图所示)或CALLER或您喜欢的其他任何pseudo package.

这个问题/解决方案似乎很基础我怀疑它必须在SO或某个地方的文档中.我将发布我的内容,然后明天再探讨.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读