LINUX.ORG.RU

Сообщения paret

 

Время жизни в Rust

И снова здравствуйте! Пытаюсь разобраться с системой владения ресурсами в Rust. Пока что не понятно для чего нужно время жизни и как использовать его вообще. Например, есть у меня функция

fn foo<'a>(x: &'a i32) {

}

Как это все понимать? Это означает, что время жизни функции должно быть не больше, чем время жизни ссылки x? Получается, что время жизни это некая гарантия(обещание), что мы не будем использовать ссылки после того, как их не станет?

 , , ,

paret
()

Изучая Rust...

Здравствуйте. Пытаюсь реализовать список на Rust. Вот что у меня получилось:

use std::fmt;

struct Node {
    value: i32,
    link: Option<Box<Node>>,
}

impl Node {
    fn new(value: i32) -> Node {
        Node { value: value, link: None, }
    }

    fn append(&mut self, value: i32) {
        match self.link {
            Some(ref mut node) => node.append(value),
            None => self.link = Some(Box::new(Node::new(value))),
        }
    }

    fn length(&self) -> i32 {
        match self.link {
            Some(ref node) => node.length() + 1,
            None => 1,
        }
    }

    fn insert_after(&mut self, value: i32, after: i32) -> bool {
        if self.value == after {
            self.link = Some(Box::new(Node { value: value, link: self.link.take() }));
            true
        }
        else {
            match self.link {
                Some(ref mut node) => node.insert_after(value, after),
                None => false,
            }
        }
    }
}

impl fmt::Display for Node {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", self.value)
        while
    }
}

fn main() {
    let mut stack = Node::new(1024);

     stack.append(67);

     println!("{}", stack);
}

Подскажите, как можно напечатать все элементы списка? В текущей реализации выводится только первый элемент.

 , ,

paret
()

Глупые вопросы начинающего

Доброго здоровьица, как завещал нам товарищ Малахов++(кстати чем то похож на Бьярне). Ой, чего то я отвлекся. А вопрос у меня следующий:

Есть у меня значит что то типа того:

pub struct TextEditor {
    text: String
}

impl TextEditor {
    pub fn new() -> TextEditor {
        TextEditor{text: String::new()}
    }
 
    pub fn add_char(&mut self, ch : char) {
        self.text.push(ch);
    }
}
 
fn main() {
    let mut editor = TextEditor::new();
 
    editor.add_char('a');
    editor.add_char('b');
    editor.add_char('c');
}


Почему сделано так, что нужно обязательно передавать self? Почему нельзя было сделать как в том же C++ - обращаться через this? Ну ладно, если нравится self, то все же, почему нельзя было неявным образом передавать этот self, чтобы постоянно не приходилось его передавать во все методы, где нужно обращаться к текущему объекту? Заранее спасибо за объяснение.

 , ,

paret
()

RSS подписка на новые темы