@@ -49,26 +49,26 @@ Elixir が持つ Ruby から来た *method missing* や *module eval* のよう
4949
5050``` elixir
5151[first, second] = [1 ,2 ]
52- first % => 1
53- second % => 2
52+ first # => 1
53+ second # => 2
5454```
5555
5656Ruby の代入演算子を使用して全く同じように書くことができるが、パターンマッチングの利点はメソッドのシグネチャの中で利用できることで、もしメソッドのシグネチャがある特定のパターンに一致しない場合は次のメソッドが試される。
5757
5858例えば、文字列のリストを反復処理しそれらを出力する方法は次のとおりだ:
5959
6060``` elixir
61- module Printer
62- % これは少なくとも一つの要素が存在するリストにマッチするパターンだ
63- % 最初の要素が head に割り当てられ、残りは tail に割り当てられる
64- def print ([head| tail])
61+ defmodule Printer do
62+ # これは少なくとも一つの要素が存在するリストにマッチするパターンだ
63+ # 最初の要素が head に割り当てられ、残りは tail に割り当てられる
64+ def print ([head| tail]) do
6565 IO .puts head
66- print (tail) % 再帰的に tail と引数として print が呼び出される
66+ print (tail) # 再帰的に tail と引数として print が呼び出される
6767 end
6868
69- % リストが空になったとき上のメソッドではマッチぜず、かわりにこれがマッチする
70- def print ([])
71- % 何もしない。すべての出力は完了している。
69+ # リストが空になったとき上のメソッドではマッチぜず、かわりにこれがマッチする
70+ def print ([]) do
71+ # 何もしない。すべての出力は完了している。
7272 end
7373end
7474
@@ -78,29 +78,29 @@ Printer.print ["foo", "bar", "baz"]
7878また別のクールな例はリストが別のリストの接頭辞であるかどうかを確認する再帰的なメソッドだ:
7979
8080``` elixir
81- module Prefix
82- % 両方のリストを反復する。もし最初の要素が等しかったら自分自身を再び呼び出す。
83- % もし最初の要素(i)が等しくなかったら、このメソッドにはマッチしない。
84- def is? ([i| prefix], [i| list]) is? (prefix, list); end
81+ defmodule Prefix do
82+ # 両方のリストを反復する。もし最初の要素が等しかったら自分自身を再び呼び出す。
83+ # もし最初の要素(i)が等しくなかったら、このメソッドにはマッチしない。
84+ def is? ([i| prefix], [i| list]) do is? (prefix, list) end
8585
86- % もし接頭辞が空だったらこのメソッドにマッチし true を返す。
87- def is? ([], _list ) true ; end
86+ # もし接頭辞が空だったらこのメソッドにマッチし true を返す。
87+ def is? ([], _list ) do true end
8888
89- % それ意外なら、false を返す。
90- def is? (_prefix , _list ); false ; end
89+ # それ意外なら、false を返す。
90+ def is? (_prefix , _list ) do false end
9191end
9292
93- Prefix .is? ([1 ,2 ,3 ], [1 ,2 ,3 ,4 ,5 ]) % => true
94- Prefix .is? ([0 ,1 ,2 ], [1 ,2 ,3 ,4 ,5 ]) % => false
93+ Prefix .is? ([1 ,2 ,3 ], [1 ,2 ,3 ,4 ,5 ]) # => true
94+ Prefix .is? ([0 ,1 ,2 ], [1 ,2 ,3 ,4 ,5 ]) # => false
9595```
9696
9797最後に、パターンマッチングは Ruby 2.0 で計画されている機能の一つであるキーワード引数を可能にする。
98- この例は Elixir のコードそのものだ(Elixir のシンボルはコロンではなくシングルクォートでることに注意):
98+ この例は Elixir のコードそのものだ< del > (Elixir のシンボルはコロンではなくシングルクォートでることに注意)</ del > :
9999
100100``` elixir
101- module Record
102- def retrieve (name, ' from: file)
103- % ここに実装を書く ...
101+ defmodule Record do
102+ def retrieve (name, from: file) do
103+ # ここに実装を書く ...
104104 end
105105end
106106```
@@ -148,9 +148,9 @@ def create
148148 post1 = post0.set (:published , false )
149149 post2 = post1.save
150150
151- if post2.persisted?
151+ if post2.persisted? do
152152 redirect_to post2
153- else
153+ else:
154154 render :new
155155 end
156156end
0 commit comments