Я использую Into<String>
в качестве типа параметра, чтобы разрешить создание Person
с, например, str
, а также принадлежащим String
pub struct Person {
pub first_name: String,
pub last_name: String,
}
impl Person {
pub fn new<S>(first_name: S, last_name: S) -> Self
where S: Into<String>
{
Self {
first_name: first_name.into(),
last_name: last_name.into(),
}
}
}
Насколько я знаю, из-замономорфизму, это нулевая стоимость во время выполнения.
Теперь, я уверен, это не нулевая стоимость:
pub struct Person {
pub first_name: String,
pub middle_names: Vec<String>,
pub last_name: String,
}
impl Person {
pub fn new<S>(first_name: S, middle_names: Vec<S>, last_name: S) -> Self
where S: Into<String>
{
let middle_names: Vec<String> = middle_names.into_iter().map(|s| s.into()).collect();
Self {
first_name: first_name.into(),
middle_names,
last_name: last_name.into(),
}
}
}
Интересно, смогу ли я как-то сделать это "нулевой стоимостью"».Vec
означает, что данные находятся в куче, но, возможно, я могу заменить Vec
какой-либо другой полезной структурой данных или даже срезом.
Есть идеи?