class Version { }

版本对象标识软件组件(以及其他实体)的版本。Raku 在内部使用它们对模块进行版本控制。

一个版本由多个部分组成,这些部分通过点连接起来以可视化方式表示。版本部分通常是一个整数,一个字符串(如 alpha)或一个 Whatever 星号 *。后者用于指示在与当前版本比较的另一个版本中任何版本部分都是可接受的。

say v1.0.~~ v1.*;     # OUTPUT: «True␤» 
say v1.0.~~ v1.*.1;   # OUTPUT: «True␤»

版本文本的第一个部分包含 v 和一个数字;这后面可能是字母数字和 Whatever 部分,并以 + 结尾。多个部分用点 . 分隔。尾随的 + 表示在比较中较高的版本是可以接受的

say v1.~~ v1.0;                 # OUTPUT: «False␤» 
say v1.~~ v1.0+;                # OUTPUT: «True␤» 
say v0.and.anything.else ~~ v0+;  # OUTPUT: «True␤»

在比较中,顺序很重要,并且每个部分依次比较。

say v1.cmp v2.1;      # OUTPUT: «Less␤»

+ 后缀始终在比较中考虑在内

say v1.0.1+ <=> v1.0.1; # OUTPUT: «More␤»

并且 * (Whatever) 也是如此,并且始终被认为小于相应部分中的任何数字,即使 * 后面跟着 +

say v1.* <=> v1.0;      # OUTPUT: «Less␤» 
say v1.* <= v1.0;       # OUTPUT: «True␤» 
say v1.*+ <= v1.0;      # OUTPUT: «True␤»

请注意,方法调用(包括伪方法,如 WHAT)需要版本文本要么用括号括起来,要么使用其他方法将它们与表示方法调用的点分隔开,如下面的示例所示

say (v0.and.some.*.stuff).parts;  # OUTPUT: «(0 and some * stuff)␤» 
say v0.and.some.*.stuff .parts;   # OUTPUT: «(0 and some * stuff)␤»

方法§

方法 new§

method new(Str:D $s)

从字符串 $s 创建一个 Version。对版本对象的数字、字母和通配符组件进行字符串梳理。除字母数字和星号外的任何字符都假定等效于点。在任何相邻的数字和字母字符之间也假定有一个点。

方法 parts§

method parts(Version:D: --> List:D)

返回组成此 Version 对象的部件列表

my $v1 = v1.0.1;
my $v2 = v1.0.1+;
say $v1.parts;                                    # OUTPUT: «(1 0 1)␤» 
say $v2.parts;                                    # OUTPUT: «(1 0 1)␤»

+ 后缀不被视为 Version 对象的部分,因此不会通过此方法返回,如上面 $v2 变量中所示。

方法 plus§

method plus(Version:D: --> Bool:D)

如果针对此版本的比较也允许更大的版本,则返回 True

my $v1 = v1.0.1;
my $v2 = v1.0.1+;
say $v1.plus;                                     # OUTPUT: «False␤» 
say $v2.plus;                                     # OUTPUT: «True␤»

方法 Str§

method Str(Version:D: --> Str:D)

返回调用者的字符串表示形式。

my $v1 = v1.0.1;
my $v2 = Version.new('1.0.1');
say $v1.Str;                                      # OUTPUT: «1.0.1␤» 
say $v2.Str;                                      # OUTPUT: «1.0.1␤»

方法 gist§

method gist(Version:D: --> Str:D)

返回调用者的字符串表示形式,就像 Str 一样,前面加上小写 v

my $v1 = v1.0.1;
my $v2 = Version.new('1.0.1');
say $v1.gist;                                      # OUTPUT: «v1.0.1␤» 
say $v2.gist;                                      # OUTPUT: «v1.0.1␤»

方法 Capture§

method Capture()

抛出 X::Cannot::Capture

类型图§

Version 的类型关系
raku-type-graph Version Version Any Any Version->Any Mu Mu Any->Mu

展开上面的图表