let x = 1;
match x {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
_ => println!("anything"),
}
when (x) {
1 -> throw ErrorException1()
2 -> throw ErrorException2()
3 -> throw ErrorException3()
else -> { return x;}
}
match color with
| Color.Red -> printfn "Red"
| Color.Green -> printfn "Green"
| Color.Blue -> printfn "Blue"
| _ -> ()
v = match(v) >> {
int: lambda: "int",
str: lambda: "str",
...: lambda: "else",
}
v = match(v) >> (
P(int, lambda x: x == 12) >> "(int f(int) -> bool) => action", # 2nd order (1)
P(12) >> "12 => action", # 1st order
P(oneof(11, 12, 13)) >> "11 | 12 | 13 => action"
)
이런걸로 시작해서
마지막엔 이런게 만들어졌습니다
왜 이모양이 났는지는 지금부터 설명
match(v: Any) >> {
<pattern>: <lambda exp>
}
🤔
패턴이랑 매칭되면 람다식(또는 콜러블) 실행하면 될것같음
딕셔너리에 패턴-콜러블 쌍을 넣어놓고 순회하면서
match(v) >> {
...: lambda: print("이게 되네 ㅋㅋ")
}
👻
아 Elipsis 쓰면 되나?? wildcard type 구현해야하나??
근데 디폴트 케이스는 어떻게 처리하지?
오 이게 되네
match(42) >> {
42 >> lambda: 42, # 두번째
int >> lambda: int, # 세번째
pattern([41, 42, 43]) >> lambda: "pattern"
}
🤷♂️
근데 패턴 종류들이 많은데 순서가 있나?
있던것같은데... <- 하지마ㅏㅏㅏ 그런거 없어ㅓㅓ
음 암튼 뭔가 먼저 매칭되게 하자!
x = match(v) >> {
int: lambda v: print(f"{v} is int"),
str: lambda v: print(f"{v} is str"),
pattern([1, 2, 3]): lambda x: print("pattern 1 catched"),
Exception: lambda x: print(x),
...: lambda: print("default")
}
🤮
와 생각했던거 대부분 되는것같은데?