Erlang中的匹配模式总结
<p><strong>一、赋值时匹配</strong></p><p><strong>原子匹配<br />
</strong><div class="codetitle"><span><a data="83564" class="copybut" id="copybut83564"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code83564"><br />
atom = atom % atom<br />
another = another % another<br />
atom = another % exception error<br />
</div><br />
<strong>变量匹配<br />
</strong><div class="codetitle"><span><a data="75278" class="copybut" id="copybut75278"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code75278"><br />
Var = 2. % 2<br />
Var = 3 - 1. % 2<br />
Var = 1. % exception error<br />
</div><br />
<strong>元组匹配<br />
</strong><div class="codetitle"><span><a data="53252" class="copybut" id="copybut53252"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code53252"><br />
Attr = {name, sloger}. % {name, sloger}<br />
{name, Name} = Attr. % {name, sloger}<br />
Name. % sloger<br />
</div><br />
<strong>列表匹配<br />
</strong><div class="codetitle"><span><a data="92773" class="copybut" id="copybut92773"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code92773"><br />
Langs = .<br />
= Langs.<br />
Head. % perl<br />
Tail. % <br />
</div><br />
<strong>参数匹配<br />
</strong><div class="codetitle"><span><a data="74210" class="copybut" id="copybut74210"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code74210"><br />
sum([]) -> 0;<br />
sum() -> H + sum(T).</p>
<p>sum(). % 6<br />
</div><br />
<strong>记录匹配<br />
</strong><div class="codetitle"><span><a data="56456" class="copybut" id="copybut56456"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code56456"><br />
%% record(post, {title, slug, body, author}).</p>
<p>Post = #post{title = "Pattern Match in Erlang",<br />
slug = "pattern-match-in-erlang",<br />
body = "Bla bla bla...",<br />
author = sloger}.</p>
<p>#post{title = Title, slug = Slug} = Post.</p>
<p>Title. % "Erlang 中的模式匹配总结"<br />
Slug. % "summary-of-pattern-match-in-erlang"<br />
</div><br />
<strong>比特匹配<br />
</strong><div class="codetitle"><span><a data="83159" class="copybut" id="copybut83159"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code83159"><br />
Red = 5.<br />
Green = 23.<br />
Blue = 200.</p>
<p>Color = <<Red:5, Green:6, Blue:5>>.</p>
<p><<R1:5, G1:6, B1:5>> = Color.</p>
<p>R1. % 5<br />
G1. % 23<br />
B1. % 200<br />
</div><br />
<strong>二、流程控制中的匹配</strong></p>
<p><strong>if<br />
</strong><div class="codetitle"><span><a data="3049" class="copybut" id="copybut3049"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code3049"><br />
</p>
<p>if<br />
Pattern1 -> Expression1;<br />
Pattern2 -> Expression2;<br />
%% and so on ...<br />
_ -> Expression3 % 匹配所有其它结果<br />
end.</p>
<p></div><br />
<strong>case</strong></p>
<p><div class="codetitle"><span><a data="69937" class="copybut" id="copybut69937"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code69937"></p>
<p>case Expression of<br />
Pattern1 -> Expression1;<br />
Pattern2 -> Expression2;<br />
%% and so on ...<br />
_ -> Expression3<br />
end.</p>
<p></div><br />
<strong>try catch</strong></p>
<p><div class="codetitle"><span><a data="69274" class="copybut" id="copybut69274"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code69274"></p>
<p>try FunctionOrExpressions of<br />
Pattern1 -> Expression1;<br />
Pattern2 -> Expression2<br />
%% and so on ...<br />
catch<br />
ExType:ExPattern1 -><br />
ExExpression1;<br />
ExType:ExPattern2 -><br />
ExExpression2;<br />
%% and so on ...<br />
_:_ -> DefaultExExpression % _:_ 匹配所有异常<br />
after<br />
AfterExpressions<br />
end<br />
</div></p>
<p><strong>消息传递匹配<br />
</strong><div class="codetitle"><span><a data="44707" class="copybut" id="copybut44707"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code44707"><br />
loop() -><br />
receive<br />
{From, {rectangle, Width, Height}} -><br />
From ! {self(), Width * Height},<br />
loop();<br />
{From, {circle, R}} -><br />
From ! {self(), 3.14 * R * R},<br />
loop();<br />
{From, _Other} -><br />
From ! {self(), {error, unknown_shape}}<br />
loop()<br />
end.<br />
Pid = spawn(fun loop/0).<br />
Pid ! {self(), {rectangle, 10, 5}}. % {Pid, 50}<br />
Pid ! {self(), {circle, 4}}. % {Pid, 50.24}<br />
Pid ! {self(), {square, 10}}. % {Pid, {error, unknown_shape}}<br />
</div></p>
頁:
[1]