Menu
Coddy logo textTech

סיכום — הדמיה של מצביע חכם

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 58 מתוך 61.

challenge icon

אתגר

קל

בואו נבנה חיקוי של מצביע חכם בשם SmartBox שמדגים איך מצביעים חכמים אמיתיים של Rust עובדים מאחורי הקלעים! המעטפת שלך תהיה גנרית, תאפשר גישה לערך הפנימי שלה ותודיע אוטומטית כשהיא מתנקה.

תארגן את הקוד שלך בשני קבצים:

  • smart_box.rs: הגדר מבנה גנרי ציבורי SmartBox<T> עם שדה יחיד value מסוג T. ממש את הפונקציה המשויכת new, שיוצרת SmartBox ומדפיסה הודעת יצירה. הוסף מתודה get שמחזירה הפניה לערך הפנימי. לבסוף, ממש את ה-trait‏ Drop כדי להדפיס הודעת ניקוי כשה-SmartBox יוצא מתחום הטווח.
  • main.rs: הוסף את מודול smart_box והדגם את SmartBox שלך עם שני טיפוסים שונים. צור SmartBox<i32> שמכיל מספר ו-SmartBox<String> שמכיל טקסט (שניהם מתוך הקלטים הנתונים). הדפס את הערכים באמצעות המתודה get שלך. הודעות Drop יופיעו אוטומטית כשהתיבות יצאו מתחום הטווח בסוף main.

כשנוצר SmartBox, עליו להדפיס:

SmartBox created

בעת גישה לערך, הדפס אותו בפורמט הזה:

Value: {value}

כשמושמט SmartBox, עליו להדפיס:

SmartBox dropped

לדוגמה, עבור הקלטים 42 ו-Hello:

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

שימו לב ששתי התיבות נוצרות תחילה, אחר כך ניגשים לערכים שלהן, ולבסוף שתיהן מושמטות בסדר הפוך (האחרונה שנוצרה מושמטת ראשונה) כש-main מסתיים.

תקבלו שני קלטים: ערך של מספר שלם (יש לנתח אותו כ-i32) וערך של מחרוזת.

נסו בעצמכם

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // קרא את הקלטים
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let number: i32 = input1.trim().parse().expect("Failed to parse number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let text = input2.trim().to_string();
    
    // TODO: צור SmartBox<i32> שמכיל את המספר
    
    // TODO: צור SmartBox<String> שמכיל את הטקסט
    
    // TODO: הדפס את הערכים באמצעות המתודה get
    // פורמט: "Value: {value}"
    
    // הודעות Drop יופיעו אוטומטית כאשר main תסתיים
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Rust אונליין