Можно ли узнать, является ли переменная ссылкой во время компиляции в Rust?
Если вы просто хотите узнать, на rust что указывает ссылка, вы rust можете использовать черту rust ToOwned
(например,
будет оцениваться rust как String
). Однако мне кажется, что rust вам может понадобиться Cow<'a, T>
. Их rust название расшифровывается rust как Clone On Write. По своей rust сути они представляют собой rust просто перечисление либо rust ссылки, либо принадлежащего rust значения.
pub enum Cow<'a, B>
where
B: 'a + ToOwned + ?Sized,
{
Borrowed(&'a B),
Owned(::Owned),
}
Они могут быть чрезвычайно rust полезны для операций со строками rust и срезами, когда вам может rust потребоваться изменить ввод, но rust вы не хотите копировать все rust данные, если ввод уже действителен. Основное rust преимущество заключается rust в том, что их можно рассматривать rust как собственные значения, но rust при этом вы можете гибко rust переключаться между ними rust в зависимости от производительности.
use std::borrow::Cow;
pub fn remove_fives(slice: &[i32]) -> Cow<[i32]> {
if slice.iter().any(|x| *x == 5) {
// We found some 5s to remove so we need to clone the input and remove them
// from the result. This creates a new Vec we can modify.
let mut owned_values = slice.to_owned();
owned_values.retain(|x| *x != 5);
Cow::Owned(owned_values)
} else {
// No fives were found so no we don't need to allocate anything or do extra work
Cow::Borrowed(slice)
}
}
Как rust забавный момент, если мы rust интерпретируем только заголовок rust вопроса, не так уж сложно rust написать простую функцию rust is_ref
, которая преобразуется в rust значение во время компиляции. Он rust использует черты в поместье, похожем rust на гораздо более полезный rust ящик impls
. Это может быть интересно, но, вероятно, не rust так уж и полезно.
pub const fn is_ref() -> bool {
trait IsNotRef {
const IS_REF: bool = false;
}
impl IsNotRef for A {}
struct Wrapper(::std::marker::PhantomData);
impl<'a, A: ?Sized> Wrapper<&'a A> {
const IS_REF: bool = true;
}
impl<'a, A: ?Sized> Wrapper<&'a mut A> {
const IS_REF: bool = true;
}
>::IS_REF
}
rust
Можно ли узнать, является ли переменная ссылкой во время компиляции в Rust?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.