Rust에서 2가지 range operator로 구성된 Range 타입은 총 6가지다






이 6가지 타입은 모두 제네릭이고 모든 Sized 타입을 넣을수 있다 Sized란 예전에 말한 DSTs(dyn Trait, [T])가 아닌 타입을 말한다


그리고 모두 RangeBounds를 구현한다 얘네를 제네릭하게 다루려면 이걸 쓰면 된다






또 얘네는 제네릭이라 Python등의 언어와는 다르게 어떤 값을 넣어도 그에 대응되는 Range 객체를 만들수있다





물론 어떤 타입을 넣느냐에 따라 구현하는 트레잇이 달라지기 때문에 Index에 넣는다거나 Iterator를 구현한다거나 하는건 타입마다 달라진다






여기서 Range는 내부타입이 Step이여야만 Iterator를 구현하는데 char는 Step를 구현하지 않아서 Range(char)는 반복할수없다


그래서 보통 usize등 숫자타입으로 만들고 반복하거나 slice의 Index에 넣는 용도로 많이 쓰고 원한다면 커스텀 타입이나 트레잇을 도입해볼수도 있다