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") }
🤮
와 생각했던거 대부분 되는것같은데?
By Seonghyeon Kim
Newbie developer