doc: update docs/elixir.md #587 3fdfa19b74

This commit is contained in:
jaywcjlove
2024-04-02 08:10:45 +00:00
parent f2ef1a7876
commit c3070ea7d3
5 changed files with 301 additions and 227 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.7 MiB

After

Width:  |  Height:  |  Size: 9.0 MiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -30,39 +30,107 @@
<p>提供基本语法和方法的 Elixir 快速参考备忘单。</p>
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装elixir">安装Elixir</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#helloexs">hello.exs</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本类型">基本类型</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本算术">基本算术</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#布尔算术">布尔算术</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#比较运算符">比较运算</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#字符串插值与拼接">字符串插值与拼接</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#集合">集合</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#列表list">列表List</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#元组tuple">元组Tuple</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#关键字列表keyword-list">关键字列表Keyword List</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#映射map">映射Map</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#模式匹配">模式匹配</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匹配操作符">匹配操作符</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#pin操作符">Pin操作符</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#控制语句">控制语句</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#case">case</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#cond">cond</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#ifunless">if/unless</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#函数">函数</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匿名函数">匿名函数</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#闭包">闭包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#命名函数">命名函数</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#enumerables-与-streams">Enumerables 与 Streams</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#enum">Enum</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#stream">Stream</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#另见">另见</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="安装elixir"><a aria-hidden="true" tabindex="-1" href="#安装elixir"><span class="icon icon-link"></span></a>安装Elixir</h3><div class="wrap-body">
<blockquote>
<p>每个操作系统的安装说明可以在 elixir-lang.org 网站上 <a href="http://elixir-lang.org/install.html">Installing Elixir</a> 部分找到。<br>
Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 Elixir 表达式的值,运行<code>iex</code>命令,继续输入几个简单的表达式试试:</p>
</blockquote>
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装-elixir">安装 Elixir</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#helloexs">hello.exs</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本类型">基本类型</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#注释">注释</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#字符串插值与拼接">字符串插值与拼接</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#变量和模式匹配">变量和模式匹配</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#原子atoms">原子Atoms</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#列表lists">列表Lists</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#元组tuples">元组Tuples</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#函数定义">函数定义</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匿名函数">匿名函数</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#控制结构">控制结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本算术">基本算术</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#布尔算术">布尔算术</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#模块和函数导入">模块和函数导入</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#管道操作符">管道操作</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#比较运算符">比较运算符</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#集合">集合</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#列表list">列表List</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#元组tuple">元组Tuple</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#关键字列表keyword-list">关键字列表Keyword List</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#映射map">映射Map</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#模式匹配">模式匹配</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匹配元组">匹配元组</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匹配列表">匹配列表</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匹配列表的头部元素">匹配列表的头部元素</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#pin-操作符">Pin 操作符</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#使用下划线-_-忽略匹配的值">使用下划线 _ 忽略匹配的值</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#控制语句">控制语句</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#ifelseend">if/else/end</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#caseend">case/end</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#condend">cond/end</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#unlessdoend">unless/do/end</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#tryrescueend">try/rescue/end</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#case">case</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#cond">cond</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#变量的作用域">变量的作用域</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#函数">函数</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#匿名函数-1">匿名函数</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#闭包">闭包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#命名函数">命名函数</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#enumerables-与-streams">Enumerables 与 Streams</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#enum">Enum</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#stream">Stream</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#另见">另见</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="安装-elixir"><a aria-hidden="true" tabindex="-1" href="#安装-elixir"><span class="icon icon-link"></span></a>安装 Elixir</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>Elixir 自带了 <code>iex</code> 这样一个交互 shell可以随时计算 Elixir 表达式的值,运行<code>iex</code>命令,继续输入几个简单的表达式试试:</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">iex <span class="token number">2</span>+3
</span><span class="code-line"><span class="token number">5</span>
</span><span class="code-line">iex <span class="token number">2</span>+3 <span class="token operator">==</span> <span class="token number">5</span>
</span><span class="code-line"><span class="token boolean">true</span>
</span><span class="code-line">iex String.length<span class="token punctuation">(</span><span class="token string">"The quick brown fox jumps over the lazy dog"</span><span class="token punctuation">)</span>
</span><span class="code-line">iex String.length<span class="token punctuation">(</span><span class="token string">"快速的狐狸跳过了懒惰的狗"</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token number">43</span>
</span></code></pre>
<p>每个操作系统的文档可以在<a href="https://elixir-lang.org">官网</a>网站上 <a href="http://elixir-lang.org/install.html">Installing Elixir</a> 部分找到</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="helloexs"><a aria-hidden="true" tabindex="-1" href="#helloexs"><span class="icon icon-link"></span></a>hello.exs</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token module class-name">IO</span><span class="token punctuation">.</span><span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Hello world from Elixir"</span><span class="token punctuation">)</span>
</span></code></pre>
<p>Elixir 运行命令</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ elixir hello.exs
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="基本类型"><a aria-hidden="true" tabindex="-1" href="#基本类型"><span class="icon icon-link"></span></a>基本类型</h3><div class="wrap-body">
<blockquote>
</div></div></div><div class="wrap h3body-not-exist row-span-3"><div class="wrap-header h3wrap"><h3 id="基本类型"><a aria-hidden="true" tabindex="-1" href="#基本类型"><span class="icon icon-link"></span></a>基本类型</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<p>Elixir 支持多种基本类型:整数、浮点、布尔值、原子和字符串。其他数据类型,如列表和元组</p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token number">1</span> <span class="token comment"># integer</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">0x1F</span> <span class="token comment"># integer支持进制、进制和十六进制的整数)</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">1.0</span> <span class="token comment"># float</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token boolean">true</span> <span class="token comment"># boolean</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token atom symbol">:atom</span> <span class="token comment"># atom / symbol</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"elixir"</span> <span class="token comment"># string</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token comment"># list</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token comment"># tuple</span>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token comment"># integer 整数</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">1</span>
</span><span class="code-line"><span class="token comment"># integer支持2进制、8进制和16进制的整数)</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">0x1F</span>
</span><span class="code-line"><span class="token comment"># float</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">1.0</span>
</span><span class="code-line"><span class="token comment"># boolean</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token boolean">true</span>
</span><span class="code-line"><span class="token comment"># atom / symbol</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token atom symbol">:atom</span>
</span><span class="code-line"><span class="token comment"># string</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"elixir"</span>
</span><span class="code-line"><span class="token comment"># list</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token comment"># tuple</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="基本算术"><a aria-hidden="true" tabindex="-1" href="#基本算术"><span class="icon icon-link"></span></a>基本算术</h3><div class="wrap-body">
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="注释"><a aria-hidden="true" tabindex="-1" href="#注释"><span class="icon icon-link"></span></a>注释</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token comment"># 这是一个单行注释</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="字符串插值与拼接"><a aria-hidden="true" tabindex="-1" href="#字符串插值与拼接"><span class="icon icon-link"></span></a>字符串插值与拼接</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> name <span class="token operator">=</span> <span class="token string">"Sean"</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"Hello <span class="token interpolation"><span class="token delimiter punctuation">#{</span>name<span class="token delimiter punctuation">}</span></span>"</span>
</span><span class="code-line"><span class="token string">"Hello Sean"</span>
</span><span class="code-line">
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"Hello "</span> <span class="token operator">&#x3C;></span> <span class="token string">"world!"</span>
</span><span class="code-line"><span class="token string">"Hello world!"</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="变量和模式匹配"><a aria-hidden="true" tabindex="-1" href="#变量和模式匹配"><span class="icon icon-link"></span></a>变量和模式匹配</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">x <span class="token operator">=</span> <span class="token number">1</span>
</span><span class="code-line"><span class="token comment"># => x 现在等于 1</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token punctuation">{</span>a<span class="token punctuation">,</span> b<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token comment"># => a 等于 1b 等于 2</span>
</span></code></pre>
<p>在 Elixir 中,使用 <code>=</code> 来进行赋值操作,但实际上是模式匹配。左边是模式,右边是值</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="原子atoms"><a aria-hidden="true" tabindex="-1" href="#原子atoms"><span class="icon icon-link"></span></a>原子Atoms</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token atom symbol">:ok</span>
</span></code></pre>
<p>原子是常量,它们的名称就是它们的值</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="列表lists"><a aria-hidden="true" tabindex="-1" href="#列表lists"><span class="icon icon-link"></span></a>列表Lists</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">list <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="元组tuples"><a aria-hidden="true" tabindex="-1" href="#元组tuples"><span class="icon icon-link"></span></a>元组Tuples</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">tuple <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token atom symbol">:ok</span><span class="token punctuation">,</span> <span class="token string">"value"</span><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="函数定义"><a aria-hidden="true" tabindex="-1" href="#函数定义"><span class="icon icon-link"></span></a>函数定义</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">defmodule</span> <span class="token module class-name">MyModule</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token keyword">def</span> <span class="token function">my_function</span><span class="token punctuation">(</span>parameter<span class="token punctuation">)</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token comment"># 函数体</span>
</span><span class="code-line"> <span class="token keyword">end</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匿名函数"><a aria-hidden="true" tabindex="-1" href="#匿名函数"><span class="icon icon-link"></span></a>匿名函数</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">add <span class="token operator">=</span> <span class="token keyword">fn</span> a<span class="token punctuation">,</span> b <span class="token operator">-></span> a <span class="token operator">+</span> b <span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="控制结构"><a aria-hidden="true" tabindex="-1" href="#控制结构"><span class="icon icon-link"></span></a>控制结构</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p><code>if/else</code></p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">if</span> x <span class="token operator">></span> <span class="token number">0</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token string">"Positive"</span>
</span><span class="code-line"><span class="token keyword">else</span>
</span><span class="code-line"> <span class="token string">"Non-positive"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
<p><code>case</code></p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">case</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">}</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> x<span class="token punctuation">}</span> <span class="token operator">-></span> <span class="token string">"Matched <span class="token interpolation"><span class="token delimiter punctuation">#{</span>x<span class="token delimiter punctuation">}</span></span>"</span>
</span><span class="code-line"> _ <span class="token operator">-></span> <span class="token string">"Not matched"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
<p><code>cond</code></p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">cond</span> <span class="token keyword">do</span>
</span><span class="code-line"> x <span class="token operator">></span> <span class="token number">2</span> <span class="token operator">-></span> <span class="token string">"Greater than 2"</span>
</span><span class="code-line"> x <span class="token operator">==</span> <span class="token number">2</span> <span class="token operator">-></span> <span class="token string">"Equal to 2"</span>
</span><span class="code-line"> <span class="token boolean">true</span> <span class="token operator">-></span> <span class="token string">"Less than 2"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist row-span-4"><div class="wrap-header h3wrap"><h3 id="基本算术"><a aria-hidden="true" tabindex="-1" href="#基本算术"><span class="icon icon-link"></span></a>基本算术</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-4-->
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token number">1</span> <span class="token operator">+</span> <span class="token number">2</span>
</span><span class="code-line"><span class="token number">3</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">5</span> <span class="token operator">*</span> <span class="token number">5</span>
@ -70,27 +138,23 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">10</span> <span class="token operator">/</span> <span class="token number">2</span>
</span><span class="code-line"><span class="token number">5.0</span>
</span></code></pre>
<blockquote>
<p>运算符<code>/</code>总是返回一个float。如果你想做整数除法或得到除法余数你可以调用div和rem函数:</p>
</blockquote>
<p>运算符<code>/</code>总是返回一个 float。如果你想做整数除法或得到除法余数你可以调用 div 和 rem 函数:</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token function">div</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token number">5</span>
</span><span class="code-line">iex<span class="token operator">></span> div <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token comment"># Elixir允许在调用需要一个或多个参数的函数时删除括号</span>
</span></code></pre>
<p>允许在调用需要一个或多个参数的函数时删除括号</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> div <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span>
</span><span class="code-line"><span class="token number">5</span>
</span><span class="code-line">iex<span class="token operator">></span> rem <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">3</span>
</span><span class="code-line"><span class="token number">1</span>
</span></code></pre>
<blockquote>
<p>可以调用round函数来获取与给定浮点数最接近的整数或者调用trunc函数来获取浮点数的整数部分</p>
</blockquote>
<p>可以调用 round 函数来获取与给定浮点数最接近的整数,或者调用 trunc 函数来获取浮点数的整数部分</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token function">round</span><span class="token punctuation">(</span><span class="token number">3.58</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token number">4</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token function">trunc</span><span class="token punctuation">(</span><span class="token number">3.58</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token number">3</span>
</span></code></pre>
<blockquote>
<p>可以使用is_integer、is_float或is_number分别检查参数是否为integer、float或number类型</p>
</blockquote>
<p>可以使用 is_integer、is_float 或 is_number 分别检查参数是否为 integer、float 或 number 类型</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token function">is_integer</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token boolean">true</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token function">is_float</span><span class="token punctuation">(</span><span class="token number">2.0</span><span class="token punctuation">)</span>
@ -98,10 +162,9 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token function">is_number</span><span class="token punctuation">(</span><span class="token number">2.0</span><span class="token punctuation">)</span>
</span><span class="code-line"><span class="token boolean">false</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="布尔算术"><a aria-hidden="true" tabindex="-1" href="#布尔算术"><span class="icon icon-link"></span></a>布尔算术</h3><div class="wrap-body">
<blockquote>
</div></div></div><div class="wrap h3body-not-exist row-span-4"><div class="wrap-header h3wrap"><h3 id="布尔算术"><a aria-hidden="true" tabindex="-1" href="#布尔算术"><span class="icon icon-link"></span></a>布尔算术</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-4-->
<p>Elixir 提供了 <code>||</code><code>&#x26;&#x26;</code><code>!</code> 布尔操作符,它们支持任何类型的操作:</p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token operator">-</span><span class="token number">20</span> <span class="token operator">||</span> <span class="token boolean">true</span>
</span><span class="code-line"><span class="token operator">-</span><span class="token number">20</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token boolean">false</span> <span class="token operator">||</span> <span class="token number">42</span>
@ -117,9 +180,7 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token operator">!</span><span class="token boolean">false</span>
</span><span class="code-line"><span class="token boolean">true</span>
</span></code></pre>
<blockquote>
<p>还有三个操作符and、or、not它们的第一个参数<strong>必须是布尔类型</strong>true 和 false:</p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token boolean">true</span> <span class="token keyword">and</span> <span class="token number">42</span>
</span><span class="code-line"><span class="token number">42</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token boolean">false</span> <span class="token keyword">or</span> <span class="token boolean">true</span>
@ -131,10 +192,17 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">not</span> <span class="token number">42</span>
</span><span class="code-line"><span class="token operator">*</span><span class="token operator">*</span> <span class="token punctuation">(</span><span class="token module class-name">ArgumentError</span><span class="token punctuation">)</span> argument error
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="模块和函数导入"><a aria-hidden="true" tabindex="-1" href="#模块和函数导入"><span class="icon icon-link"></span></a>模块和函数导入</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">import</span> <span class="token module class-name">List</span><span class="token punctuation">,</span> <span class="token attr-name">only:</span> <span class="token punctuation">[</span><span class="token attr-name">duplicate:</span> <span class="token number">2</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="管道操作符"><a aria-hidden="true" tabindex="-1" href="#管道操作符"><span class="icon icon-link"></span></a>管道操作符</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">result <span class="token operator">=</span> data
</span><span class="code-line"> <span class="token operator">|></span> <span class="token function">process1</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span><span class="code-line"> <span class="token operator">|></span> <span class="token function">process2</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></code></pre>
<p><code>|></code> 用于链式调用函数,将前一个函数的结果作为下一个函数的第一个参数</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="比较运算符"><a aria-hidden="true" tabindex="-1" href="#比较运算符"><span class="icon icon-link"></span></a>比较运算符</h3><div class="wrap-body">
<blockquote>
<p>比较运算符 <code>==</code>, <code>!=</code>, <code>===</code>, <code>!==</code>, <code>&#x3C;=</code>, <code>>=</code>, <code>&#x3C;</code><code>></code></p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token number">1</span> <span class="token operator">></span> <span class="token number">2</span>
</span><span class="code-line"><span class="token boolean">false</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">1</span> <span class="token operator">!=</span> <span class="token number">2</span>
@ -144,32 +212,33 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token number">2</span> <span class="token operator">&#x3C;=</span> <span class="token number">3</span>
</span><span class="code-line"><span class="token boolean">true</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="字符串插值与拼接"><a aria-hidden="true" tabindex="-1" href="#字符串插值与拼接"><span class="icon icon-link"></span></a>字符串插值与拼接</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> name <span class="token operator">=</span> <span class="token string">"Sean"</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"Hello <span class="token interpolation"><span class="token delimiter punctuation">#{</span>name<span class="token delimiter punctuation">}</span></span>"</span>
</span><span class="code-line"><span class="token string">"Hello Sean"</span>
</span><span class="code-line">
</span><span class="code-line">iex<span class="token operator">></span> <span class="token string">"Hello "</span> <span class="token operator">&#x3C;></span> <span class="token string">"world!"</span>
</span><span class="code-line"><span class="token string">"Hello world!"</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="集合"><a aria-hidden="true" tabindex="-1" href="#集合"><span class="icon icon-link"></span></a>集合</h2><div class="wrap-body">
<blockquote>
<p>列表list、元组tuple、关键字列表keyword list、映射map</p>
</blockquote>
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="列表list"><a aria-hidden="true" tabindex="-1" href="#列表list"><span class="icon icon-link"></span></a>列表List</h3><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="列表list"><a aria-hidden="true" tabindex="-1" href="#列表list"><span class="icon icon-link"></span></a>列表List</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line">
</span><span class="code-line">iex<span class="token operator">></span> list <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token string">"π"</span> <span class="token operator">|</span> list<span class="token punctuation">]</span> <span class="token comment"># 列表的开头添加元素</span>
</span></code></pre>
<p>列表的开头添加元素</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token string">"π"</span> <span class="token operator">|</span> list<span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token string">"π"</span><span class="token punctuation">,</span> <span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> list <span class="token operator">++</span> <span class="token punctuation">[</span><span class="token string">"Cherry"</span><span class="token punctuation">]</span> <span class="token comment"># 列表的尾部添加元素/列表拼接</span>
</span></code></pre>
<p>列表的尾部添加元素/列表拼接</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> list <span class="token operator">++</span> <span class="token punctuation">[</span><span class="token string">"Cherry"</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">,</span> <span class="token string">"Cherry"</span><span class="token punctuation">]</span>
</span><span class="code-line">
</span><span class="code-line">iex<span class="token operator">></span> hd <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span> <span class="token comment"># 获取列表的头部元素</span>
</span></code></pre>
<p>获取列表的头部元素</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> hd <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token number">3.14</span>
</span><span class="code-line">iex<span class="token operator">></span> tl <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span> <span class="token comment"># 获取列表的尾部元素</span>
</span></code></pre>
<p>获取列表的尾部元素</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> tl <span class="token punctuation">[</span><span class="token number">3.14</span><span class="token punctuation">,</span> <span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token atom symbol">:pie</span><span class="token punctuation">,</span> <span class="token string">"Apple"</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="元组tuple"><a aria-hidden="true" tabindex="-1" href="#元组tuple"><span class="icon icon-link"></span></a>元组Tuple</h3><div class="wrap-body">
@ -182,21 +251,15 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span><span class="token punctuation">{</span><span class="token atom symbol">:foo</span><span class="token punctuation">,</span> <span class="token string">"bar"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token atom symbol">:hello</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">}</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token attr-name">foo:</span> <span class="token string">"bar"</span><span class="token punctuation">,</span> <span class="token attr-name">hello:</span> <span class="token string">"world"</span><span class="token punctuation">]</span>
</span></code></pre>
<blockquote>
<p>关键字列表非常重要,它有以下的特性:</p>
</blockquote>
<ul>
<li>key都是原子atom</li>
<li>key是有序的定义后顺序不会改变</li>
<li>key不必是唯一的</li>
</ul>
<blockquote>
<p>因为这些原因,关键字列表最常见的用法是作为参数传递给函数。</p>
</blockquote>
<p>因为这些原因,常见的用法是作为参数传递给函数</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="映射map"><a aria-hidden="true" tabindex="-1" href="#映射map"><span class="icon icon-link"></span></a>映射Map</h3><div class="wrap-body">
<blockquote>
<p>Elixir 的映射maps是键值对结构的第一选择和关键字列表keywords不同映射允许任意类型的数据作为键而且数据并不严格排序。 你可以使用 %{} 来定义映射:</p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> map <span class="token operator">=</span> <span class="token punctuation">%</span><span class="token punctuation">{</span><span class="token atom symbol">:foo</span> <span class="token operator">=></span> <span class="token string">"bar"</span><span class="token punctuation">,</span> <span class="token string">"hello"</span> <span class="token operator">=></span> <span class="token atom symbol">:world</span><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">%</span><span class="token punctuation">{</span><span class="token atom symbol">:foo</span> <span class="token operator">=></span> <span class="token string">"bar"</span><span class="token punctuation">,</span> <span class="token string">"hello"</span> <span class="token operator">=></span> <span class="token atom symbol">:world</span><span class="token punctuation">}</span>
</span><span class="code-line">iex<span class="token operator">></span> map<span class="token punctuation">[</span><span class="token atom symbol">:foo</span><span class="token punctuation">]</span>
@ -208,74 +271,101 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
<blockquote>
<p>模式匹配是 Elixir 很强大的特性,它允许我们匹配简单值、数据结构、甚至函数。</p>
</blockquote>
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匹配操作符"><a aria-hidden="true" tabindex="-1" href="#匹配操作符"><span class="icon icon-link"></span></a>匹配操作符</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token comment"># 匹配元组</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">{</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token atom symbol">:hello</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">}</span>
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匹配元组"><a aria-hidden="true" tabindex="-1" href="#匹配元组"><span class="icon icon-link"></span></a>匹配元组</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">{</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token atom symbol">:hello</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">{</span><span class="token atom symbol">:hello</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">}</span>
</span><span class="code-line">iex<span class="token operator">></span> a
</span><span class="code-line"><span class="token atom symbol">:hello</span>
</span><span class="code-line">iex<span class="token operator">></span> b
</span><span class="code-line"><span class="token string">"world"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 匹配列表</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> a
</span><span class="code-line"><span class="token number">1</span>
</span><span class="code-line"><span class="token comment"># 匹配列表的头部元素</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span>head <span class="token operator">|</span> tail<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> head
</span><span class="code-line"><span class="token number">1</span>
</span><span class="code-line">iex<span class="token operator">></span> tail
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="pin操作符"><a aria-hidden="true" tabindex="-1" href="#pin操作符"><span class="icon icon-link"></span></a>Pin操作符</h3><div class="wrap-body">
<blockquote>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匹配列表"><a aria-hidden="true" tabindex="-1" href="#匹配列表"><span class="icon icon-link"></span></a>匹配列表</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line">iex> [a, b, c] = [1, 2, 3]
</span><span class="code-line">[1, 2, 3]
</span><span class="code-line">iex> a
</span><span class="code-line">1
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匹配列表的头部元素"><a aria-hidden="true" tabindex="-1" href="#匹配列表的头部元素"><span class="icon icon-link"></span></a>匹配列表的头部元素</h3><div class="wrap-body">
<pre><code class="code-highlight"><span class="code-line">iex> [head | tail] = [1, 2, 3]
</span><span class="code-line">[1, 2, 3]
</span><span class="code-line">iex> head
</span><span class="code-line">1
</span><span class="code-line">iex> tail
</span><span class="code-line">[2, 3]
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="pin-操作符"><a aria-hidden="true" tabindex="-1" href="#pin-操作符"><span class="icon icon-link"></span></a>Pin 操作符</h3><div class="wrap-body">
<p>pin 操作符,就是用已经绑定的值去匹配,而不是重新绑定一个新值。</p>
</blockquote>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">{</span>x<span class="token punctuation">,</span> <span class="token operator">^</span>x<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">{</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">}</span>
</span><span class="code-line">iex<span class="token operator">></span> x
</span><span class="code-line"><span class="token number">2</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 使用下划线_忽略匹配的值</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span>head <span class="token operator">|</span> _<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="使用下划线-_-忽略匹配的值"><a aria-hidden="true" tabindex="-1" href="#使用下划线-_-忽略匹配的值"><span class="icon icon-link"></span></a>使用下划线 <code>_</code> 忽略匹配的值</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token punctuation">[</span>head <span class="token operator">|</span> _<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line"><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
</span><span class="code-line">iex<span class="token operator">></span> head
</span><span class="code-line"><span class="token number">1</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="控制语句"><a aria-hidden="true" tabindex="-1" href="#控制语句"><span class="icon icon-link"></span></a>控制语句</h2><div class="wrap-body">
<blockquote>
<p>case, cond, and if</p>
</blockquote>
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="case"><a aria-hidden="true" tabindex="-1" href="#case"><span class="icon icon-link"></span></a>case</h3><div class="wrap-body">
<blockquote>
<p>case允许我们将一个值与许多模式进行比较直到找到匹配的模式</p>
</blockquote>
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="ifelseend"><a aria-hidden="true" tabindex="-1" href="#ifelseend"><span class="icon icon-link"></span></a>if/else/end</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">if</span> condition <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token comment"># 条件成立时执行的代码</span>
</span><span class="code-line"><span class="token keyword">else</span>
</span><span class="code-line"> <span class="token comment"># 条件不成立时执行的代码</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="caseend"><a aria-hidden="true" tabindex="-1" href="#caseend"><span class="icon icon-link"></span></a>case/end</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">case</span> expression <span class="token keyword">do</span>
</span><span class="code-line"> pattern1 <span class="token operator">-></span> <span class="token comment"># 匹配 pattern1 时执行的代码</span>
</span><span class="code-line"> pattern2 <span class="token operator">-></span> <span class="token comment"># 匹配 pattern2 时执行的代码</span>
</span><span class="code-line"> _ <span class="token operator">-></span> <span class="token comment"># 其他情况执行的代码</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="condend"><a aria-hidden="true" tabindex="-1" href="#condend"><span class="icon icon-link"></span></a>cond/end</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">cond</span> <span class="token keyword">do</span>
</span><span class="code-line"> condition1 <span class="token operator">-></span> <span class="token comment"># 条件1成立时执行的代码</span>
</span><span class="code-line"> condition2 <span class="token operator">-></span> <span class="token comment"># 条件2成立时执行的代码</span>
</span><span class="code-line"> <span class="token boolean">true</span> <span class="token operator">-></span> <span class="token comment"># 如果没有任何条件成立,执行这里的代码</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="unlessdoend"><a aria-hidden="true" tabindex="-1" href="#unlessdoend"><span class="icon icon-link"></span></a>unless/do/end</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">unless</span> condition <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token comment"># 条件为假时执行的代码</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="tryrescueend"><a aria-hidden="true" tabindex="-1" href="#tryrescueend"><span class="icon icon-link"></span></a>try/rescue/end</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line"><span class="token keyword">try</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token comment"># 可能会引发异常的代码</span>
</span><span class="code-line"><span class="token keyword">rescue</span>
</span><span class="code-line"> pattern1 <span class="token operator">-></span> <span class="token comment"># 匹配 pattern1 的异常处理代码</span>
</span><span class="code-line"> pattern2 <span class="token operator">-></span> <span class="token comment"># 匹配 pattern2 的异常处理代码</span>
</span><span class="code-line"> _ <span class="token operator">-></span> <span class="token comment"># 其他异常处理代码</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="case"><a aria-hidden="true" tabindex="-1" href="#case"><span class="icon icon-link"></span></a>case</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p>允许将一个值与许多模式进行比较,直到找到匹配的模式:</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">case</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token punctuation">{</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">}</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This clause won't match"</span>
</span><span class="code-line"> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This clause will match and bind x to 2 in this clause"</span>
</span><span class="code-line"> <span class="token string">"该子句将匹配并绑定 x 到该子句中的 2"</span>
</span><span class="code-line"> _ <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This clause would match any value"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"This clause will match and bind x to 2 in this clause"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 还可以使用when指定额外的条件</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">case</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token keyword">do</span>
</span><span class="code-line"><span class="token string">"该子句将匹配并绑定 x 到该子句中的 2"</span>
</span></code></pre>
<p>还可以使用when指定额外的条件</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">case</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token keyword">when</span> x <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"Will match"</span>
</span><span class="code-line"> _ <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"Would match, if guard condition were not satisfied"</span>
</span><span class="code-line"> <span class="token string">"如果不满足保护条件,将匹配"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"Will match"</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="cond"><a aria-hidden="true" tabindex="-1" href="#cond"><span class="icon icon-link"></span></a>cond</h3><div class="wrap-body">
<blockquote>
<p>当我们需要匹配条件而不是值的时候,可以使用 cond这和其他语言的 else if 或者 elsif 相似</p>
</blockquote>
<p>当我们需要根据条件进行匹配而不是值时,类似于其他语言的 <code>else if</code><code>elsif</code>,可以使用 <code>cond</code> 控制结构。</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">cond</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token number">2</span> <span class="token operator">+</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">5</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This will not be true"</span>
@ -285,39 +375,21 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line"> <span class="token string">"But this will"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"But this will"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 如果所有的条件都返回nil或false则会引发一个错误CondClauseError。因此需要添加一个final条件等于true,它将始终匹配:</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">cond</span> <span class="token keyword">do</span>
</span></code></pre>
<p>如果所有的条件都返回 <code>nil</code><code>false</code>则会引发一个错误CondClauseError。因此需要添加一个 <code>final</code> 条件,等于 <code>true</code>,它将始终匹配:</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">cond</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token number">2</span> <span class="token operator">+</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">5</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This is never true"</span>
</span><span class="code-line"> <span class="token number">2</span> <span class="token operator">*</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">3</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"Nor this"</span>
</span><span class="code-line"> <span class="token boolean">true</span> <span class="token operator">-></span>
</span><span class="code-line"> <span class="token string">"This is always true (equivalent to else)"</span>
</span><span class="code-line"> <span class="token string">"这始终为真(等同于 else"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"This is always true (equivalent to else)"</span>
</span><span class="code-line"><span class="token string">"这始终为真(等同于 else"</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="ifunless"><a aria-hidden="true" tabindex="-1" href="#ifunless"><span class="icon icon-link"></span></a>if/unless</h3><div class="wrap-body">
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">if</span> <span class="token boolean">true</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token string">"This works!"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"This works!"</span>
</span><span class="code-line">
</span><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">unless</span> <span class="token boolean">true</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token string">"This will never be seen"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token boolean">nil</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># if...else...</span>
</span><span class="code-line">iex<span class="token operator">></span> <span class="token keyword">if</span> <span class="token boolean">nil</span> <span class="token keyword">do</span>
</span><span class="code-line"> <span class="token string">"This won't be seen"</span>
</span><span class="code-line"><span class="token keyword">else</span>
</span><span class="code-line"> <span class="token string">"This will"</span>
</span><span class="code-line"><span class="token keyword">end</span>
</span><span class="code-line"><span class="token string">"This will"</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 关于Elixir中变量的作用域如果在if、case和类似的构造中声明或更改了任何变量则声明和更改将只在构造中可见。</span>
</span><span class="code-line">iex<span class="token operator">></span> x <span class="token operator">=</span> <span class="token number">1</span>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="变量的作用域"><a aria-hidden="true" tabindex="-1" href="#变量的作用域"><span class="icon icon-link"></span></a>变量的作用域</h3><div class="wrap-body">
<p>如果在if、case和类似的构造中声明或更改了任何变量则声明和更改将只在构造中可见。</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> x <span class="token operator">=</span> <span class="token number">1</span>
</span><span class="code-line"><span class="token number">1</span>
</span><span class="code-line"><span class="token keyword">if</span> <span class="token boolean">true</span> <span class="token keyword">do</span>
</span><span class="code-line"> x <span class="token operator">=</span> x <span class="token operator">+</span> <span class="token number">1</span>
@ -325,9 +397,9 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line"><span class="token number">2</span>
</span><span class="code-line">iex<span class="token operator">></span> x
</span><span class="code-line"><span class="token number">1</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 如果要更改值则必须从if返回值</span>
</span><span class="code-line">iex<span class="token operator">></span> x <span class="token operator">=</span> <span class="token number">1</span>
</span></code></pre>
<p>如果要更改值则必须从if返回值</p>
<pre class="language-elixir"><code class="language-elixir code-highlight"><span class="code-line">iex<span class="token operator">></span> x <span class="token operator">=</span> <span class="token number">1</span>
</span><span class="code-line"><span class="token number">1</span>
</span><span class="code-line">iex<span class="token operator">></span> x <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token boolean">true</span> <span class="token keyword">do</span>
</span><span class="code-line"> x <span class="token operator">+</span> <span class="token number">1</span>
@ -337,7 +409,7 @@ Elixir 自带了<code>iex</code>这样一个交互 shell可以随时计算 El
</span><span class="code-line"><span class="token number">2</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="函数"><a aria-hidden="true" tabindex="-1" href="#函数"><span class="icon icon-link"></span></a>函数</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匿名函数"><a aria-hidden="true" tabindex="-1" href="#匿名函数"><span class="icon icon-link"></span></a>匿名函数</h3><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="匿名函数-1"><a aria-hidden="true" tabindex="-1" href="#匿名函数-1"><span class="icon icon-link"></span></a>匿名函数</h3><div class="wrap-body">
<blockquote>
<p>使用 fn 和 end 关键字来定义匿名函数,在这两者之间,可以定义任意数量的参数和函数体,它们用 -> 分隔开。</p>
</blockquote>

View File

@ -1317,7 +1317,7 @@
<!--rehype:class=home-card home-links-->
<p>如果你有资源,可以很方便<a href="https://github.com/jaywcjlove/reference/issues/102#issue-1451649637">部署 web 版</a>,这非常简单,只需要克隆 <a href="https://github.com/jaywcjlove/reference/tree/gh-pages">gh-pages</a> 分支代码到你的静态服务就可以了,还可以使用 <a href="https://hub.docker.com/r/wcjiang/reference">docker</a> 快捷部署 web 版。</p>
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2024/04/02 15:17:08</footer></footer><script src="data.js?v=1.5.3" defer></script><script src="js/fuse.min.js?v=1.5.3" defer></script><script src="js/main.js?v=1.5.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2024/04/02 16:10:04</footer></footer><script src="data.js?v=1.5.3" defer></script><script src="js/fuse.min.js?v=1.5.3" defer></script><script src="js/main.js?v=1.5.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><input id="mysearch-input" type="search" placeholder="搜索" autocomplete="off"><div class="mysearch-clear"></div></div><button id="mysearch-close" type="button">搜索</button></div><div class="mysearch-result"><div id="mysearch-menu"></div><div id="mysearch-content"></div></div></div></div></body>
</html>