String
Stringμ νμ ν λΉλκ³ κ°λ³ κΈΈμ΄μ νμ€ UTF-8 λ¬Έμμ΄ λ²νΌμ
λλ€:
fn main() { let mut s1 = String::new(); s1.push_str("μλ νμΈμ"); println!("s1: len = {}, μ©λ = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: len = {}, μ©λ = {}", s2.len(), s2.capacity()); let s3 = String::from("π¨π"); println!("s3: len = {}, λ¬Έμ μ = {}", s3.len(), s3.chars().count()); }
Stringμ Deref<Target = str>μ ꡬνν©λλ€. μ΄λ , String κ°μ λν΄μλ strμ λͺ¨λ λ©μλλ₯Ό νΈμΆ ν μ μλ€λ μλ―Έ μ
λλ€.
This slide should take about 10 minutes.
String::newλ μλ‘μ΄ λΉ λ¬Έμμ΄μ λ°νν©λλ€.String::with_capacityλ μλ‘ λ§λ€ λ¬Έμμ΄ λ²νΌμ λ£μ λ°μ΄ν° ν¬κΈ°λ₯Ό μκ³ μλ κ²½μ°μ μ¬μ©ν μ μμ΅λλ€.String::lenμStringμ λ°μ΄νΈ ν¬κΈ°λ₯Ό λ°νν©λλ€. (μ€μ λ¬Έμ κ°μμλ λ€λ₯Ό μ μμ΅λλ€.)String::charsλ μ€μ λ¬Έμ(character)λ€μ λν μ΄ν°λ μ΄ν°λ₯Ό λ°νν©λλ€.charλ‘ ννλλ λ¬Έμλ μ°λ¦¬κ° μ€μ λ‘ μΈμνκ³ μ¬μ©νλ λ¬Έμμλ λ€λ₯Ό μ μμ΅λλ€. μμ κ²°ν©μΌλ‘ λ¬Έμλ₯Ό νννλ κ²½μ°κ° μκΈ° λλ¬Έμ λλ€. μ΄μ λν΄μλ Grapheme Clusterλ₯Ό μ°Έκ³ νμΈμ.- μ¬λλ€μ΄ λ¬Έμμ΄μ΄λΌκ³ λ§ν λμλ
&strμ΄κ±°λStringμΌ μ μμ΅λλ€. - μ΄λ€ νμ
μ΄
Deref<Target = T>λ₯Ό ꡬννκ³ μμΌλ©΄, μ»΄νμΌλ¬λ μ¬λ¬λΆμ΄Tμ λ©μλλ€μ νΈμΆν μ μκ² λμμ€λλ€.DerefνΈλ μμ κ΄ν΄μ μμ§ λ€λ£¨μ§ μμμΌλ―λ‘ μ΄ μμ μμλ μ΄κ²μΌλ‘ λ¬Έμμ μ¬μ΄λλ° κ΅¬μ‘°κ° λλΆλΆ μ€λͺ λ©λλ€.StringμDeref<Target = str>μ ꡬννκ³ μκΈ° λλ¬ΈμStringμ λν΄μλstrλ©μλλ€μ νΈμΆν μ μμ΅λλ€.- Write and compare
let s3 = s1.deref();andlet s3 = &*s1;.
Stringμ λ°μ΄νΈ 벑ν°μ λνΌλ‘ ꡬνλμ΄ μμ΅λλ€. 벑ν°κ° μ§μνλ μ¬λ¬κ°μ§ μ°μ°λ€μStringλ μ§μν©λλ€. λ€λ§Stringμ λͺκ°μ§ 보μ₯ λ΄μ©μ΄ λ μμ΅λλ€.Stringμ μΈλ±μ€λ‘ μ κ·Όνλ λ°©λ²λ€μ λΉκ΅ν΄λ³΄μΈμ:s3.chars().nth(i).unwrap()λ₯Ό μ΄μ©νμ¬ ν λ¬Έμλ₯Ό μ ννλ κ²½μ°,iκ°μ΄ λ²μλ₯Ό λ²μ΄λ λ, λ²μ΄λμ§ μμ λ λμμ μ€λͺ νμΈμ.s3[0..4]λ₯Ό μ΄μ©ν΄μ λ¬Έμμ΄μ μΌλΆλ₯Ό μ ννλλ°, μ¬λΌμ΄μ€κ° μ λμ½λ λ¬Έμμ΄ κ²½κ³μ λ± λ§μ§ μμ κ²½μ° μ΄λ»κ² λλμ§ μ€λͺ νμΈμ.
- Many types can be converted to a string with the
to_stringmethod. This trait is automatically implemented for all types that implementDisplay, so anything that can be formatted can also be converted to a string.