版本 | Version
版本
用于根据需求解析和匹配版本的函数。
版本是特定格式的字符串或Version
Version.parse/1
...
Version
SemVer 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"
要求也支持and
和or
复杂的条件:
# 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
。示例请参见下表。
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()
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