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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
