Elixir语言中 Kernel 相关用法介绍如下。
  是 Elixir 的默认环境。Kernel 
它主要包括:
- 基本语言原语,例如算术运算符、进程生成、数据类型处理等
 - control-flow 的宏和定义新函数(模块、函数等)
 - 增强模式匹配的警卫检查
 
您可以在 Elixir 代码中的任何位置调用   函数和宏,而无需使用 Kernel Kernel. 前缀,因为它们都是自动导入的。例如,在 IEx 中,您可以调用:
iex> is_number(13)
true
如果您不想从   导入函数或宏,请使用 Kernel :except 选项,然后按数量列出函数/宏:
import Kernel, except: [if: 2, unless: 2]
有关导入的更多信息,请参阅 。Kernel.SpecialForms.import/2 
Elixir 也有特殊的形式,它们总是被导入并且不能被跳过。这些在   中进行了说明。Kernel.SpecialForms 
标准库
  提供了 Elixir 标准库所基于的基本函数。建议探索标准库以获得高级函数。以下是标准库中的主要模块组(此列表不是完整的参考,请参阅文档侧边栏以获取所有条目)。Kernel 
内置类型
以下模块处理 Elixir 内置数据类型:
- 具有名称的文字常量(Atomtrue、false和nil是原子)- 具有浮点精度的数字Float- 对代码块的引用,使用Functionfn/1特殊形式创建- 整数(不是分数)Integer- 可变数量元素的集合(链表)List- 键值对的集合Map- 轻量级执行线程Process- 与外部世界交互的机制Port- 固定数量元素的集合Tuple
没有附带模块的数据类型有两种:
- 位串 - 位序列,使用 
创建。当位数可以被 8 整除时,它们被称为二进制文件,可以使用 Erlang 的Kernel.SpecialForms.<<>>/1:binary模块进行操作 - 参考 - 运行时系统中的唯一值,使用 
创建make_ref/0 
数据类型
Elixir 还提供了建立在上面列出的类型之上的其他数据类型。他们之中有一些是:
-Dateyear-month-day给定日历中的结构- 给定日历中带有时区的日期和时间DateTime- 从错误和意外情况中产生的数据Exception- 唯一元素的无序集合MapSet- 给定日历中没有时区的日期和时间NaiveDateTime- 二元素元组的列表,通常表示可选值Keyword- 两个整数之间的包含范围Range- 正则表达式Regex- 表示字符的 UTF-8 编码二进制文件String-Timehour:minute:second给定日历中的结构- 标识资源的 URI 表示URI- 版本和要求的表示Version
系统模块
与底层系统交互的模块,例如:
协议
协议向 Elixir 添加了多态调度。它们是可由数据类型实现的合约。有关协议的更多信息,请参阅 。 Elixir 在标准库中提供了以下协议:Protocol 
- 将数据收集到数据类型中Collectable- 处理 Elixir 中的集合。Enumerable模块提供处理集合的即刻函数,Enum模块提供惰性函数Stream- 将数据类型转换为其编程语言表示Inspect- 将数据类型转换为它们的外部世界表示作为字符列表(非基于编程)List.Chars- 将数据类型转换为字符串形式的外部世界表示(非基于编程)String.Chars
基于流程和application-centric 函数
以下模块构建在进程之上以提供并发性、fault-tolerance 等。
- 封装可变状态的进程Agent- 用于启动、停止和配置应用程序的函数Application- 通用 client-server APIGenServer- 基于键值过程的存储Registry- 负责启动、监督和关闭其他进程的进程Supervisor- 执行计算的进程Task- 专门管理任务的主管Task.Supervisor
支持文件
Elixir 文档还包括 "Pages" 部分下的支持文档。那些是:
- Compatibility and deprecations - 列出每个 Elixir 版本和 Erlang/OTP 之间的兼容性,发布模式;列出所有不推荐使用的函数,它们被弃用的时间和替代品
 - Library guidelines - 编写库的通用指南、反模式和规则
 - Naming conventions - Elixir 代码的命名约定
 - Operators - 列出所有 Elixir 运算符及其优先级
 - Patterns and guards - 模式、守卫和扩展简介
 - Syntax reference - 语言语法参考
 - Typespecs - 类型和函数规范,包括类型列表
 - Unicode syntax - 概述 Elixir 对 Unicode 的支持
 - Writing documentation - 在 Elixir 中编写文档的指南
 
警卫
该模块包括 Elixir 开发人员使用的内置防护。它们是一组预定义的用于增强模式匹配的函数和宏,通常在 when 运算符之后调用。例如:
def drive(%User{age: age}) when age >= 16 do
  ...
end
只有当用户的年龄大于或等于 16 岁时才会调用上述子句。Guards 还支持使用 and 和 or 加入多个条件。如果所有防护表达式的计算结果都为 true ,则整个防护为真。 Patterns and guards 页面中提供了对守卫的更完整介绍。
结构比较
该模块中的比较函数执行结构比较。这意味着结构是基于它们的表示而不是它们的语义值进行比较的。这对于旨在提供排序的函数特别重要,例如   、 >/2   、 </2   、 >=/2   、 <=/2   和 min/2   。例如:max/2 
~D[2017-03-31] > ~D[2017-04-01]
将返回 true 因为结构比较会比较 :month 或 :year 之前的 :day 字段。因此,在比较结构时,您经常使用结构模块本身提供的compare/2 函数:
iex> Date.compare(~D[2017-03-31], ~D[2017-04-01])
:lt
或者,您可以使用   模块中的函数来排序或计算最大值/最小值:Enum 
iex> Enum.sort([~D[2017-03-31], ~D[2017-04-01]], Date)
[~D[2017-03-31], ~D[2017-04-01]]
iex> Enum.max([~D[2017-03-31], ~D[2017-04-01]], Date)
~D[2017-04-01]
真值和假值
除了布尔值 true 和 false 之外,Elixir 还具有 "truthy" 或 "falsy" 值的概念。
- 既不是
false也不是nil的值是真实的 - 当值是 
false或nil时,它是虚假的 
Elixir 有函数,比如   ,and/2 only 可以处理布尔值,但也有函数可以处理这些真/假值,比如   和 &&/2   。!/1 
例子
我们可以使用   函数两次来检查一个值的真实性。!/1 
真实的值:
iex> !!true
true
iex> !!5
true
iex> !![1,2]
true
iex> !!"foo"
true
虚假值(其中正好有两个):
iex> !!false
false
iex> !!nil
false
内联
这个模块中说明的一些函数被 Elixir 编译器内联到   模块中的 Erlang 对应函数中。这些函数在Erlang-land 中被称为 BIF(内置内部函数),它们表现出有趣的属性,因为其中一些允许在警卫中使用,而另一些用于编译器优化。:erlang 
捕获函数时,可以看到大多数内联函数生效:
iex> &Kernel.is_atom/1
&:erlang.is_atom/1
这些函数将在其文档中明确标记为“由编译器内联”。
相关用法
- Elixir Kernel.SpecialForms.case用法及代码示例
 - Elixir Kernel.round用法及代码示例
 - Elixir Kernel.left / right用法及代码示例
 - Elixir Kernel.put_in用法及代码示例
 - Elixir Kernel.tl用法及代码示例
 - Elixir Kernel.left - right用法及代码示例
 - Elixir Kernel.tuple_size用法及代码示例
 - Elixir Kernel.defexception用法及代码示例
 - Elixir Kernel.to_charlist用法及代码示例
 - Elixir Kernel.base ** exponent用法及代码示例
 - Elixir Kernel.left !== right用法及代码示例
 - Elixir Kernel.if用法及代码示例
 - Elixir Kernel.spawn_monitor用法及代码示例
 - Elixir Kernel.to_string用法及代码示例
 - Elixir Kernel.length用法及代码示例
 - Elixir Kernel.first..last用法及代码示例
 - Elixir Kernel.SpecialForms.%{}用法及代码示例
 - Elixir Kernel.SpecialForms.for用法及代码示例
 - Elixir Kernel.then用法及代码示例
 - Elixir Kernel.spawn用法及代码示例
 - Elixir Kernel.defmodule用法及代码示例
 - Elixir Kernel.SpecialForms.quote用法及代码示例
 - Elixir Kernel.left > right用法及代码示例
 - Elixir Kernel.binding用法及代码示例
 - Elixir Kernel.sigil_r用法及代码示例
 
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Kernel。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
