Вам не нужно to_string
, если вы хотите сохранить ссылку на строку. Кроме того, set_user
также должен принимать ссылку, а не значение (потому что в структуре нет поля для его хранения):
pub struct User<'a> {
pub data: &'a u8,
}
/// Represents a simple text message.
pub struct SimpleMessage<'a> {
pub user: &'a User<'a>,
pub content: &'a str,
}
impl<'a> SimpleMessage<'a> {
fn new_msg(user: &'a User, content: &'a str) -> SimpleMessage<'a> {
SimpleMessage { user, content }
}
pub fn set_user(&mut self, user: &'a User<'a>) {
self.user = user;
}
}
fn main() {
let data1 = 1;
let data2 = 2;
let user1 = User { data: &data1 };
let user2 = User { data: &data2 };
let mut msg = SimpleMessage::new_msg(&user1, "test");
msg.set_user(&user2);
}
Игровая площадка
Если вы хотите сохранить строки, созданные во время выполнения (например, с помощью вызова format!()
), вы можете сохранить String
:
pub struct SimpleMessage<'a> {
pub user: &'a User<'a>,
pub content: String,
}
. . .
fn new_msg(user: &'a User, content: String) -> SimpleMessage<'a> {
SimpleMessage { user, content }
}
. . .
let mut msg = SimpleMessage::new_msg(&user1, format!("created at {}", "runtime"));
Детская площадка