我創建了一個名為new. 檔案夾結構,這里鏈接如下:
new
│ .gitignore
│ Changes
│ dist.ini
│ LICENSE
│ META6.json
│ README.md
│
├───lib
│ │ new.rakumod
│ │
│ ├───Desc
│ │ Mean.rakumod
│ │
│ └───Deviation
│ DeviationMean.rakumod
│
└───t
01-basic.rakutest
我有兩個功能,meaninDesc::Mean.rakumod和deviation_from_meanin Deviation::DeviationMean.rakumodmodules in lib。這些都是簡單的函式,我不想為它們定義任何命名空間。因此,當我安裝此模塊并嘗試將此模塊與 一起使用時use new,我希望能夠在不呼叫它們的子模塊名稱的情況下訪問這兩個函式。
我想做的是(現在不起作用)
use new;
my @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];
say mean(@test1);
say deviation_from_mean(@test1);
而不是(有效)
use new;
use Desc::Mean;
use Deviation::DeviationMean;
my @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];
say mean(@test1);
say deviation_from_mean(@test1);
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
粗略地說并遵循檔案,您可以將這些方法名稱作為匯出放入new命名空間中,如下所示(在 new.rakumod 中):
my package EXPORT::DEFAULT {
OUR::mean := "Desc::Mean::mean";
OUR::deviation_from_mean :=
"Deviation::DeviationMean::deviation_from_mean";
}
uj5u.com熱心網友回復:
# main.raku
use lib 'lib';
use new;
say mean; # 42
# Desc::Mean
unit module Desc::Mean;
sub mean is export { 42 }
# new
sub EXPORT {
{
use Desc::Mean;
return ::.pairs.grep(*.key ne '$_').Map;
}
}
unit module new;
筆記:
sub EXPORT { ... }模塊中的必須new在陳述句unit module new;之前。usesub 中需要的其他模塊(例如Deviation::DeviationMean)將這些模塊的符號匯入到compunit中;然后將其所有符號重新匯出到任何s 。EXPORTnewreturn ::.pairs.grep(*.key ne '$_').Map;usenew
有關上述內容的解釋,請參見:
jnthn 對Use Haskell like Prelude modules in a module的回答。
我對將類的運算子定義分離到其他檔案并使用它們的回答中的“將符號匯入包中然后重新匯出它們”部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/440335.html
