generics - tres - ¿Qué significa el signo de interrogación en un parámetro de tipo enlazado?
quitar caracteres sql server (1)
Encontré la definición de std::borrow::BorrowMut
:
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow_mut(&mut self) -> &mut Borrowed;
}
¿Qué significa el signo de interrogación delante de Sized
en este parámetro de tipo enlazado ( Borrowed: ?Sized
?)?
He consultado
- El libro de Rust Programming Language ,
- La referencia del óxido ², y también
- ¿Qué significa "Tamaño no implementado"? en desbordamiento de pila
Pero no encontré una explicación. Por favor dé una referencia en su respuesta.
¹ especialmente ver sección 5.20 Rasgos² y sección 6.1.9 Rasgos
Significa que el rasgo es opcional . La sintaxis actual se introdujo en la sintaxis DST RFC .
¿El único rasgo del que soy consciente funciona ?
es de Sized
En este ejemplo específico, podemos implementar BorrowMut
para tipos sin tamaño , como [T]
- ¡tenga en cuenta que no hay &
aquí!
Una implementación incorporada hace uso de eso:
impl<T> BorrowMut<[T]> for Vec<T>
Como Matthieu M. agrega :
Se trata de un caso de ensanchamiento ; en general, los límites imponen más restricciones, pero en el caso de
Sized
se decidió que, a menos que se indique lo contrario, se supondría unaT
genérica. ¿La forma de observar lo contrario sería marcarlo?Sized
("quizásSized
").