在线文档教程

版本 | Version

版本

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

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

VersionSemVer 2.0模式...

版本

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

MAJOR.MINOR.PATCH

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

"1.0.0-alpha.3"

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

"1.0.0-alpha.3+20130417140000"

结构

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

所需

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

# Only version 2.0.0 "== 2.0.0" # Anything later than 2.0.0 "> 2.0.0"

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

# 2.0.0 and later until 2.1.0 ">= 2.0.0 and < 2.1.0"

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

"~> 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。示例请参见下表。

RequirementVersion:allow_preMatches
~> 2.02.1.0-true
~> 2.03.0.0-false
~> 2.0.02.0.1-true
~> 2.0.02.1.0-false
~> 2.1.22.1.3-devtruetrue
~> 2.1.22.1.3-devfalsefalse
~> 2.1-dev2.2.0-devfalsetrue
~> 2.1.2-dev2.1.3-devfalsetrue
= 2.1.02.2.0-devfalsefalse
= 2.1.0-dev2.2.3-devtruetrue

摘要

类型

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()

build() :: String.t | nil

major()

major() :: String.t | non_neg_integer

matchable()

matchable() :: {major :: major, minor :: minor, patch :: patch, pre :: pre}

minor()

minor() :: non_neg_integer | nil

patch()

patch() :: non_neg_integer | nil

pre()

pre() :: [String.t | non_neg_integer]

requirement()

requirement() :: String.t | Version.Requirement.t

t()

t() :: %Version{build: build, major: major, minor: minor, patch: patch, pre: pre}

version()

version() :: String.t | t

功能

compare(version1, version2)

compare(version, version) :: :gt | :eq | :lt

比较两个版本。

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

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

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

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

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

实例

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)

compile_requirement(Version.Requirement.t) :: Version.Requirement.t

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

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

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

match?(version, requirement, keyword) :: boolean

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

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

备选方案

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

实例

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)

parse(String.t) :: {:ok, t} | :error

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

实例

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)

parse!(String.t) :: t | no_return

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

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

实例

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)

parse_requirement(String.t) :: {:ok, Version.Requirement.t} | :error

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

实例

iex> {:ok, requirement} = Version.parse_requirement("== 2.0.1") iex> requirement #Version.Requirement<== 2.0.1> iex> Version.parse_requirement("== == 2.0.1") :error