LINUX.ORG.RU

История изменений

Исправление Aswed, (текущая версия) :

Во-первых.

let v1 = &VersionBuilder::new()
        .major(2)
        .patch(3);
VVV
let v1 = VersionBuilder::new()
        .major(2)
        .patch(3);
Что бы объект существовал, нужно что бы кто-то им владел. Ссылки не дают владение над объектом. В твоем варианте, ты пытаешься взять ссылку на объект, которым никто не владеет и время жизни которого закончилось.
let v2 = &Version{major: 1, minor: 2, patch:5}.inc_minor();
Вот тут то же самое.
Во-вторых:
fn minor(mut self, value: i64) -> VersionBuilder {
    self.0.minor = value;
    self
}
Зачем вообще так делать в расте? Почему не
fn minor(&mut self, value: i64) {
    self.0.minor = value;
}

Исходная версия Aswed, :

Во-первых.

let v1 = &VersionBuilder::new()
        .major(2)
        .patch(3);
VVV
let v1 = VersionBuilder::new()
        .major(2)
        .patch(3);
Что бы объект существовал, нужно что бы кто-то им владел. Ссылки не дают владение над объектом. В твоем варианте, ты пытаешься взять ссылку на объект, которым никто не владеет и время жизни которого закончилось.
let v2 = &Version{major: 1, minor: 2, patch:5}.inc_minor();
Вот тут то же самое. Во-вторых:
fn minor(mut self, value: i64) -> VersionBuilder {
    self.0.minor = value;
    self
}
Зачем вообще так делать в расте? Почему не
fn minor(&mut self, value: i64) {
    self.0.minor = value;
}