LINUX.ORG.RU

Rust: Как хранить &str в структуре?

 


1

5

Что я хочу:

struct Foo
{
    const char * name;
};
 
void Bar(struct Foo * foo)
{
    foo->name = "Name";
}
Теперь на Руст:
struct Foo<'a> {
    name: &'a str
}

impl<'a> Foo<'a> {

    fn bar(&self) {
        self.name = "nm";
    }
}
Это не конпелируется:
error[E0594]: cannot assign to `self.name` which is behind a `&` reference
  --> src/main.rs:26:9
   |
25 |     fn bar(&self) {
   |            ----- help: consider changing this to be a mutable reference: `&mut self`
26 |         self.name = "nm";
   |         ^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be written
Как это тут это всё вот?

Пы Сы: В итоге, это должно быть так:

struct Foo<'a> {
    name: &'a str
}

impl<'a> Foo<'a> {

    fn bar(&mut self) {
        self.name = "nm";
    }
}

★★★★★

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

Какое позорище. Ни первое ни второе ни эквивалент показанному.

Почему вариант со &'static str не эквивалент? В примере вообще-то как раз статическая строка и используется.

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

Почему вариант со &’static str не эквивалент?

Допустим даже потому, что там const *, т.е. ссылка мутабельная. В любом случае дело не в этом.

В примере вообще-то как раз статическая строка и используется.

Это не так работает. Нельзя смысл конструкции свести к примеру автора, который в принципе не состоятелен. Это типичная проблема, потому как адепты потом делают далеко идущие и неправильные выводы.

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

Вон выше мы видим типичную жертву пропаганды, которая даже не знает о существовании исключений и в целом том, благодаря чему упомянутый ворованный string и работает.

Если ты хочешь, чтобы адепты этой херни являлись поголовно несостоятельными фанатиками-балаболами, то пожалуйста.

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