当前位置: 首页 > 知识库问答 >
问题:

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

公孙胡媚
2023-03-14

是否有一种明智的方法让一个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'

其思想是传播操作符重载(中缀:

(请不要拆掉排水管,因为我怀疑总有办法!)

共有1个答案

万俟招
2023-03-14

所以这个答案的第一个版本基本上是无用的。

这是我想到的第一个新东西,我理解你的问题是什么。我还没有在回购上尝试过。

在文件a-module.pm6中:

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

our意味着如果我们可以要求它,我们将能够看到这个例程,尽管它只能通过其完全限定的名称可见

然后在使用文件中:

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

如果模块丢失,则使用的默认例程可以是来自外部的例程(如图所示),也可以是来自调用者的例程,或者您喜欢的任何其他伪包。

这个问题/解决方案看起来很基本,我怀疑它一定在SO或文档中的某个地方。我将发布我得到的东西,然后明天探索更多。

 类似资料:
  • 我正在进行排序,并希望控制alpha值的cmp不区分大小写(即。https://perl6.org/archive/rfc/143.html). 有没有:我可能是这个的副词?

  • 我的主要模块与设置。格拉德尔: 背景格拉德尔 我的听众: 当我运行我的bootApplication主类时,它会在根构建目录中创建一个eventlistener-. jar文件。但是eventlistener模块没有检查资源文件夹,我猜它没有看到引导应用上下文。也许它应该被收集到一个jar文件?看起来我在gradle构建文件中遗漏了一些东西。

  • 如图,我将framework中的ResponseResult引入到blog中,然后在maven install命令下报错。 blog依赖了framework。是不是因为我两个模块的java下的包名一样导致的,如果是的话,该怎么改呢?

  • 我有三种型号 发票 演播室 R_studio_pay 关系如下 工作室有很多发票 工作室有一个R_studio_pay 我需要发票- 我试着使用whereHas studio- 但无法在何处应用条件。

  • 问题内容: 我试图使用Dagger在正在构建的应用程序上进行依赖注入,当我拥有一个程序包的模块(取决于注入器(可能是另一个模块)提供的值)时,在构造适当的DAG时遇到了麻烦。 如果我有一个用于配置变量的简单模块(例如,我可能想换成测试环境) 而另一个模块依赖于它,例如 我尝试在构造函数中引导注入的行失败,并且它抱怨我没有在适当的模块中指定显式行。 通过反复试验,我发现如果在行中添加,这种情况就消失