λ³΅μ¬ νμ
μ΄λμ΄ κΈ°λ³Έ μ€μ μ΄μ§λ§, νΉμ νμ μ 볡μ¬λ©λλ€:
fn main() { let x = 42; let y = x; println!("x: {x}"); // would not be accessible if not Copy println!("y: {y}"); }
μ΄λ¬ν νμ
λ€μ Copy
νΈλ μμ ꡬνν©λλ€.
μ§μ λ§λ νμ
λ€λ Copy
νΈλ μμ ꡬννμ¬ λ³΅μ¬λ₯Ό ν μ μμ΅λλ€:
#[derive(Copy, Clone, Debug)] struct Point(i32, i32); fn main() { let p1 = Point(3, 4); let p2 = p1; println!("p1: {p1:?}"); println!("p2: {p2:?}"); }
- ν λΉ ν,
p1
μp2
λ μμ μ λ°μ΄ν°λ₯Ό μμ ν©λλ€. - λͺ
μμ μΌλ‘
p1.clone()
λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό 볡μ¬ν μ μμ΅λλ€.
This slide should take about 5 minutes.
볡μ¬(copy)μ 볡μ (clone)λ κ°μ§ μμ΅λλ€:
- 볡μ¬λ λ©λͺ¨λ¦¬μ λ΄μ©μ κ·Έλλ‘ ν λ² λ λ§λλ κ²μ μλ―Ένλ©°, μ무 κ°μ²΄μμλ λ€ μ§μνμ§λ μμ΅λλ€.
- 볡μ¬λ 컀μ€ν°λ§μ΄μ¦ ν μ μμ΅λλ€. (C++μμ λ³΅μ¬ μμ±μλ₯Ό ν΅ν΄ λ³΅μ¬ λμμ μμλ‘ κ΅¬νν μ μλ κ²κ³Ό λΉκ΅κ° λ©λλ€.)
- 볡μ λ λ³΄λ€ μΌλ°μ μΈ μμ
μ΄λ©°,
Clone
νΈλ μμ ꡬννμ¬ λ³΅μ μ λμμ 컀μ€ν°λ§μ΄μ¦ ν μ μμ΅λλ€. Drop
νΈλ μμ ꡬνν νμ μ 볡μ¬λμ§ μμ΅λλ€.
μμ μμμμ λ€μμ μλν΄ λ³΄μκΈ° λ°λλλ€:
Point
ꡬ쑰체μString
νλλ₯Ό μΆκ°νμΈμ. μ»΄νμΌ λμ§ μμ κ²μ λλ€. μλνλ©΄String
μCopy
νΈλ μμ ꡬννκ³ μμ§ μκΈ° λλ¬Έμ λλ€.- Remove
Copy
from thederive
attribute. The compiler error is now in theprintln!
forp1
. p1
μ 볡μ νλ©΄ μ λμν¨μ νμΈν΄ 보μΈμ.