パターンマッチ
n月刊ラムダノート Vol1No3 を読む
p15 リストのタプルに対する網羅性チェック
p16 非冗長性(到達しないパターン)のチェック
p16 ワイルドカードパターン(特に、_を複数回書く場合がある)
p18 valによる束縛もパターンマッチの一種
p19 マッチするかの前に、各値の型が一致してるかを検査する
p34 LLVMのunreachableを使うことで高速化できる場合がある
p36 ORパターンというものがある
p39 Rustでは match x {} ができる。この式の型はbottom型になる
p67 ピン演算子(^a)
p68 Asパターン(=>)
case-in
match-case
value patternがある。Foo.Bar のようにドットが入っているものが埋め込み対象?
asパターンはas
match =>
orパターン |
Some(10) と Some(y) の違い (後者のyは新しい変数。yを入れ込みたいときはguardで書く)
数値とcharのrangeが特別に書ける (cf. Rubyのcase-whenは===で判定)
guardは pat if cond =>
@バインディング
match-case
型のみでのマッチング:case p: Phone => みたいに書ける
switch =>
match
code:sk
class A; def initialize(@a: 1, @b: 2); end; end
match x
when 0
when Integer
when A(a, b)
多重代入 (let =)
code:sk
let Pair(a, b) = find_pair
ちなみに上記ができるならば、以下も自動的にできることになる
let a = 1
配列のパターンマッチとか別に要らん気がしてきたな(Rubyと違いnつ組をArrayで代用しないので)