expected = 7이 바로 위에 있어도 in [expected]는 [9]와 기분 좋게 매치돼요. "7만 받는다"처럼 읽히죠. 아니에요. 패턴 안의 맨 변수는 들어온 값을 그냥 묶어 버려서, expected는 슬그머니 9가 되고 분기는 실행돼요.
해결책은 in [^expected]예요. 이미 가진 값과 비교해요. 알고 나면 읽는 맛은 있네요. 다만 그 작은 모자 하나가 짊어진 의미가 꽤 커요.
비교가 하나뿐이면 핀으로 만족해요. 조건이 늘어나면 in [value] if value == expected처럼 묶기와 검사를 눈에 보이는 두 단계로 나누는 쪽이 낫고, 무엇을 검사하는지 감추는 영리한 압축 패턴보다는 그쪽을 고를 거예요. 어디서부터 핀으로는 버거워지는지는 솔직히 아직 잘 모르겠어요.