[Rust] lifetime: Higher Ranked trait bound (HRTB)
Rust์์๋ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ผ์ดํํ์ ๋๋ฌธ์ ์ด๋์ ๋ ๊ผฌ์ผ ์ผ์ด ์ฆ๋ค.
higher-ranked ํธ๋ ์ ๋ฐ์ด๋๋ ์ด๋ฐ ์ผ์ด์ค ์ค ํ๋๋ฅผ ์ํ ํธ์๊ธฐ๋ฅ์ด๋ค.
์์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค.
์ผ๋จ ์ด๋ฐ ํธ๋ ์๊ณผ ๊ทธ ๊ตฌํ์ฒด๊ฐ ์๋ค.
์ฌ๊ธฐ์ ๊ตฌํ์ฒด๋ &i32 ์ฐธ์กฐ๊ฐ์ ๋ฐ์ ์ถ๋ ฅ๋ง ํ๋ ๊ฐ๋จํ ํํ๋ก ๊ตฌํ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์ง์ญ๋ณ์์ ์ฐธ์กฐ๊ฐ์ ๊ฑฐ๊ธฐ๋ก ๋๊ฒจ์ฃผ๋ ๋จ์ํ ํจ์ foo๋ฅผ ๊ตฌํ ํ, ํธ์ถํด๋ดค๋ค.

์ด๋ฌ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
์ด์ฐจํผ do_something์ด ์ฐธ์กฐ๋ฅผ ๋ฐ๋๋ผ๋ ์ฐ๊ณ ๋ฐ๋ก ๋ฒ๋ฆฌ๋ ๋ก์ง์์ผ๋ก ๋ฌธ์ ๊ฐ ์์ง๋ง, Rust๊ฐ ๊ทธ๊ฒ๊น์ง๋ ์์ ํ ์บ์น๋ฅผ ํ์ง ๋ชปํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ค.
์๋ง ์ ๋ Trait์ &i32 ๋ผ์ดํํ์์ foo๋ฅผ ํธ์ถํ ๋์ ๋ฐ๊นฅ ๋ผ์ดํํ์์ธ๋ฐ, ํจ์ฌ ์ข์ ์ง์ญ๋ณ์ ๋ผ์ดํํ์์ ๊ตฌ๊ฒจ๋ฃ์ผ๋ ค๊ณ ํด์์ธ ๊ฒ ๊ฐ๋ค.
์ด๋ด๋ ์ฌ์ฉํ ๋งํ๊ฒ higher-ranked ํธ๋ ์ ๋ฐ์ด๋๋ค.
๋ค์๊ณผ ๊ฐ์ด for<>๋ก ๋ผ์ดํํ์์ ์ง์ ํด์ฃผ๊ณ , ๊ทธ๊ฑธ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ผ ์๋ ๋ฐ๊นฅ์ ๋ผ์ดํํ์์ ๊ณ ์ ๋์๋ Trait์ &i32๊ฐ ํ์ฌ ์์ชฝ ๋ผ์ดํํ์์ ๋ง์ถฐ์ง ๊ฒ์ด๋ค. (์ถ์ )
์ด์ ๋ ์ ๋๋ค.
์ฐธ์กฐ
https://doc.rust-lang.org/reference/trait-bounds.html#higher-ranked-trait-bounds
https://doc.rust-lang.org/nomicon/hrtb.html
https://stackoverflow.com/questions/35592750/how-does-for-syntax-differ-from-a-regular-lifetime-bound