LINUX.ORG.RU

Я познаю Rust: Лайфтаймы

 ,


2

5

Пытаюсь разобраться как работать с лайфтаймами:

use std::collections::LinkedList;

struct Point {
    x: f32,
    y: f32,
}

struct Rectangle<'a> {
    p2: &'a Point,
    p1: &'a Point,
}

fn main() {
    let mut list = LinkedList::new();
    let point1 = Point { x: 0.3, y: 0.4 };
    let point2 = Point { x: 0.3, y: 0.4 };
    
    let rect = Rectangle { p1:&point1, p2:&point2};
    list.push_back(rect);
    list.clear();
}

Как правильно очищать список, чтобы компилятор не ругался на point1, point2?

★★★★★
Ответ на: комментарий от mersinvald

let value = if let Some(value) = optional {value} else {0}
Но вообще это удобнее делать через map_or, как указали выше

эскобар.jpeg, а match тут вполне к месту, он хорошо читается, просто занимает больше строк.

anonymous
()
Ответ на: комментарий от anonymous

Тогда могу посоветовать [...]

Могу посоветовать учиться читать.

tailgunner ★★★★★
()
Ответ на: комментарий от RazrFalcon

Если верить blame - то этот код был написан на Rust 1.0

Rust 1.0 - плохой Rust, где не было if и if let? Дык вроде как были.

anonymous
()
Ответ на: комментарий от anonymous

На C++ не намного лучше:

const uint8_t bidi_level = bidi_levels ? bidi_levels->at(paragraph_bytes_processed) : 0;

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Хидеры — это ерунда. А вот необходимость определять, что может конкретный компилятор и как это обойти (например), вот это один из источников увеличения объема кода.

Rust, по понятным причинам, от этих болячек освобожден на ближайшие лет 5.

eao197 ★★★★★
()
Ответ на: комментарий от RazrFalcon

Это бы намёк на то, что код писался тогда, когда coding style только начинали (и так и не закончили) писать.

Код писался не так давно и проект живой. Насчет стиля, а когда закончат? И если не закончили, то откуда тогда взялись «эксперты», которые точно знают как надо? И почему они не подсказали авторам Rust подправить актуальную доку, где используются match, а не if:

https://doc.rust-lang.org/std/option/index.html#options-and-pointers-nullable...

anonymous
()
Ответ на: комментарий от anonymous

По ссылке match. Вы предлагаете вместо него if использовать?

RazrFalcon ★★★★★
()
Ответ на: комментарий от DarkEld3r

Когда топик про релиз Раста — может, и неплохо, а если конкретный вопрос, то плохо, ибо разговор уходит в сторону от решения проблемы. Хотя главное для Девелопмента — корм :-).

Virtuos86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.