首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

版本 | Version

用于根据需求解析和匹配版本的函数。

版本是特定格式的字符串或VersionVersion.parse/1...

版本

简而言之,一个版本由三个数字表示:

代码语言:javascript
复制
MAJOR.MINOR.PATCH

预发布支持附加-[0-9A-Za-z-\.]*

代码语言:javascript
复制
"1.0.0-alpha.3"

可以通过追加添加生成信息。+[0-9A-Za-z-\.]*

代码语言:javascript
复制
"1.0.0-alpha.3+20130417140000"

结构

版本由Version结构和字段是根据SemVer命名的::major,,,:minor,,,:patch,,,:pre,和:build...

所需

需求允许您指定您愿意使用的给定依赖项的哪个版本。需求支持公共操作符,如>=,,,<=,,,>,,,==,以及人们所期望的工作朋友:

代码语言:javascript
复制
# Only version 2.0.0
"== 2.0.0"

# Anything later than 2.0.0
"> 2.0.0"

要求也支持andor复杂的条件:

代码语言:javascript
复制
# 2.0.0 and later until 2.1.0
">= 2.0.0 and < 2.1.0"

由于上面的例子是如此普遍的要求,所以可以用以下方式表示:

代码语言:javascript
复制
"~> 2.0.0"

~>永远不会包括其上限的预发行版本。它也可以用来在主要版本部分设置一个上限。见下表~>要求及其相应的翻译。

〜>

翻译

〜> 2.0.0

= 2.0.0和<2.1.0

〜> 2.1.2

= 2.1.2和<2.2.0

〜> 2.1.3-dev

= 2.1.3-dev和<2.2.0

〜> 2.0

= 2.0.0和<3.0.0

〜> 2.1

= 2.1.0和<3.0.0

何时allow_pre: false设置,除非操作数是预发布版本,否则该要求将不符合预发布版本。默认是始终允许预发布版本,但请注意在十六进制:allow_pre中设置为false。示例请参见下表。

Requirement

Version

:allow_pre

Matches

~> 2.0

2.1.0

-

true

~> 2.0

3.0.0

-

false

~> 2.0.0

2.0.1

-

true

~> 2.0.0

2.1.0

-

false

~> 2.1.2

2.1.3-dev

true

true

~> 2.1.2

2.1.3-dev

false

false

~> 2.1-dev

2.2.0-dev

false

true

~> 2.1.2-dev

2.1.3-dev

false

true

= 2.1.0

2.2.0-dev

false

false

= 2.1.0-dev

2.2.3-dev

true

true

类型

build()major()matchable()minor()patch()pre()requirement()t()version()

功能

compare(version1, version2)

比较两个版本

compile_requirement(req)

:ets.match_spec_compile/1为了更快的匹配,将需求编译为其内部表示

match?(version, requirement, opts \ [])

检查给定版本是否符合规范。

parse(string)

将版本字符串解析为Version结构

parse!(string)

将版本字符串解析为Version

parse_requirement(string)

将版本需求字符串解析为Version.Requirement结构

build()

代码语言:javascript
复制
build() :: String.t | nil

major()

代码语言:javascript
复制
major() :: String.t | non_neg_integer

matchable()

代码语言:javascript
复制
matchable() :: {major :: major, minor :: minor, patch :: patch, pre :: pre}

minor()

代码语言:javascript
复制
minor() :: non_neg_integer | nil

patch()

代码语言:javascript
复制
patch() :: non_neg_integer | nil

pre()

代码语言:javascript
复制
pre() :: [String.t | non_neg_integer]

requirement()

代码语言:javascript
复制
requirement() :: String.t | Version.Requirement.t

t()

代码语言:javascript
复制
t() :: %Version{build: build, major: major, minor: minor, patch: patch, pre: pre}

version()

代码语言:javascript
复制
version() :: String.t | t

compare(version1, version2)

代码语言:javascript
复制
compare(version, version) :: :gt | :eq | :lt

比较两个版本。

如果第一个版本大于第二个版本,则返回:gt:lt反之亦然。如果两个版本相同,则返回:eq

预发行版严格少于相应的版本。

如果补丁段是字母数字的,则按词典进行比较,而数值比较则不然。

构建段被忽略:如果两个版本仅在其构建段中不同,则它们被认为是相等的。

提出Version.InvalidVersionError如果两个给定版本中的任何一个不能被解析,则为例外。如果给定一个已经解析的版本,此函数将不会引发。

实例

代码语言:javascript
复制
iex> Version.compare("2.0.1-alpha1", "2.0.0")
:gt

iex> Version.compare("1.0.0-beta", "1.0.0-rc1")
:lt

iex> Version.compare("1.0.0-10", "1.0.0-2")
:gt

iex> Version.compare("2.0.1+build0", "2.0.1")
:eq

iex> Version.compare("invalid", "2.0.1")
** (Version.InvalidVersionError) invalid version: "invalid"

compile_requirement(req)

代码语言:javascript
复制
compile_requirement(Version.Requirement.t) :: Version.Requirement.t

:ets.match_spec_compile/1为了更快的匹配,将需求编译为其内部表示。

内部表示是不透明的,不能转换为外部术语格式,然后再次返回而不丢失它的属性(这意味着它不能被发送到另一个节点上的进程,并且仍然是有效的编译match_spec,也不能存储在磁盘上) 。

match?(version, requirement, opts \ [])

代码语言:javascript
复制
match?(version, requirement, keyword) :: boolean

检查给定版本是否符合规范。

如果version满足requirement则返回true,否则返回false。提出了Version.InvalidRequirementError如果例外requirement是不能分析,或者Version.InvalidVersionError如果异常version是不能分析。如果给出一个已经解析过的版本和需求,这个函数不会引发。

备选方案

  • :allow_pre(boolean) - false除非操作数是预发布版本,否则预发布版本不匹配。例子见上表。默认为true

实例

代码语言:javascript
复制
iex> Version.match?("2.0.0", "> 1.0.0")
true

iex> Version.match?("2.0.0", "== 1.0.0")
false

iex> Version.match?("foo", "== 1.0.0")
** (Version.InvalidVersionError) invalid version: "foo"

iex> Version.match?("2.0.0", "== == 1.0.0")
** (Version.InvalidRequirementError) invalid requirement: "== == 1.0.0"

parse(string)

代码语言:javascript
复制
parse(String.t) :: {:ok, t} | :error

将版本字符串解析为Version结构。

实例

代码语言:javascript
复制
iex> {:ok, version} = Version.parse("2.0.1-alpha1")
iex> version
#Version<2.0.1-alpha1>

iex> Version.parse("2.0-alpha1")
:error

parse!(string)

代码语言:javascript
复制
parse!(String.t) :: t | no_return

将版本字符串解析为Version...

如果string是无效版本,InvalidVersionError则会提出。

实例

代码语言:javascript
复制
iex> Version.parse!("2.0.1-alpha1")
#Version<2.0.1-alpha1>

iex> Version.parse!("2.0-alpha1")
** (Version.InvalidVersionError) invalid version: "2.0-alpha1"

parse_requirement(string)

代码语言:javascript
复制
parse_requirement(String.t) ::
  {:ok, Version.Requirement.t} |
  :error

将版本需求字符串解析为Version.Requirement结构。

实例

代码语言:javascript
复制
iex> {:ok, requirement} = Version.parse_requirement("== 2.0.1")
iex> requirement
#Version.Requirement<== 2.0.1>

iex> Version.parse_requirement("== == 2.0.1")
:error

扫码关注腾讯云开发者

领取腾讯云代金券