mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Rollup merge of #56101 - frewsxcv:frewsxcv-dyn, r=steveklabnik
Incorporate `dyn` into more comments and docs. r? @rust-lang/docs
This commit is contained in:
commit
6398df1520
@ -489,7 +489,7 @@ impl Box<dyn Any> {
|
||||
/// ```
|
||||
/// use std::any::Any;
|
||||
///
|
||||
/// fn print_if_string(value: Box<Any>) {
|
||||
/// fn print_if_string(value: Box<dyn Any>) {
|
||||
/// if let Ok(string) = value.downcast::<String>() {
|
||||
/// println!("String ({}): {}", string.len(), string);
|
||||
/// }
|
||||
@ -523,7 +523,7 @@ impl Box<dyn Any + Send> {
|
||||
/// ```
|
||||
/// use std::any::Any;
|
||||
///
|
||||
/// fn print_if_string(value: Box<Any + Send>) {
|
||||
/// fn print_if_string(value: Box<dyn Any + Send>) {
|
||||
/// if let Ok(string) = value.downcast::<String>() {
|
||||
/// println!("String ({}): {}", string.len(), string);
|
||||
/// }
|
||||
@ -618,10 +618,10 @@ impl<I: FusedIterator + ?Sized> FusedIterator for Box<I> {}
|
||||
|
||||
/// `FnBox` is a version of the `FnOnce` intended for use with boxed
|
||||
/// closure objects. The idea is that where one would normally store a
|
||||
/// `Box<FnOnce()>` in a data structure, you should use
|
||||
/// `Box<FnBox()>`. The two traits behave essentially the same, except
|
||||
/// `Box<dyn FnOnce()>` in a data structure, you should use
|
||||
/// `Box<dyn FnBox()>`. The two traits behave essentially the same, except
|
||||
/// that a `FnBox` closure can only be called if it is boxed. (Note
|
||||
/// that `FnBox` may be deprecated in the future if `Box<FnOnce()>`
|
||||
/// that `FnBox` may be deprecated in the future if `Box<dyn FnOnce()>`
|
||||
/// closures become directly usable.)
|
||||
///
|
||||
/// # Examples
|
||||
@ -629,7 +629,7 @@ impl<I: FusedIterator + ?Sized> FusedIterator for Box<I> {}
|
||||
/// Here is a snippet of code which creates a hashmap full of boxed
|
||||
/// once closures and then removes them one by one, calling each
|
||||
/// closure as it is removed. Note that the type of the closures
|
||||
/// stored in the map is `Box<FnBox() -> i32>` and not `Box<FnOnce()
|
||||
/// stored in the map is `Box<dyn FnBox() -> i32>` and not `Box<dyn FnOnce()
|
||||
/// -> i32>`.
|
||||
///
|
||||
/// ```
|
||||
@ -638,8 +638,8 @@ impl<I: FusedIterator + ?Sized> FusedIterator for Box<I> {}
|
||||
/// use std::boxed::FnBox;
|
||||
/// use std::collections::HashMap;
|
||||
///
|
||||
/// fn make_map() -> HashMap<i32, Box<FnBox() -> i32>> {
|
||||
/// let mut map: HashMap<i32, Box<FnBox() -> i32>> = HashMap::new();
|
||||
/// fn make_map() -> HashMap<i32, Box<dyn FnBox() -> i32>> {
|
||||
/// let mut map: HashMap<i32, Box<dyn FnBox() -> i32>> = HashMap::new();
|
||||
/// map.insert(1, Box::new(|| 22));
|
||||
/// map.insert(2, Box::new(|| 44));
|
||||
/// map
|
||||
|
@ -633,7 +633,7 @@ impl<T: Clone> Rc<T> {
|
||||
impl Rc<dyn Any> {
|
||||
#[inline]
|
||||
#[stable(feature = "rc_downcast", since = "1.29.0")]
|
||||
/// Attempt to downcast the `Rc<Any>` to a concrete type.
|
||||
/// Attempt to downcast the `Rc<dyn Any>` to a concrete type.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -641,7 +641,7 @@ impl Rc<dyn Any> {
|
||||
/// use std::any::Any;
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// fn print_if_string(value: Rc<Any>) {
|
||||
/// fn print_if_string(value: Rc<dyn Any>) {
|
||||
/// if let Ok(string) = value.downcast::<String>() {
|
||||
/// println!("String ({}): {}", string.len(), string);
|
||||
/// }
|
||||
|
@ -21,7 +21,7 @@
|
||||
/// The representation of a trait object like `&SomeTrait`.
|
||||
///
|
||||
/// This struct has the same layout as types like `&SomeTrait` and
|
||||
/// `Box<AnotherTrait>`.
|
||||
/// `Box<dyn AnotherTrait>`.
|
||||
///
|
||||
/// `TraitObject` is guaranteed to match layouts, but it is not the
|
||||
/// type of trait objects (e.g. the fields are not directly accessible
|
||||
|
@ -2200,7 +2200,7 @@ pub enum CastKind {
|
||||
/// "Unsize" -- convert a thin-or-fat pointer to a fat pointer.
|
||||
/// codegen must figure out the details once full monomorphization
|
||||
/// is known. For example, this could be used to cast from a
|
||||
/// `&[i32;N]` to a `&[i32]`, or a `Box<T>` to a `Box<Trait>`
|
||||
/// `&[i32;N]` to a `&[i32]`, or a `Box<T>` to a `Box<dyn Trait>`
|
||||
/// (presuming `T: Trait`).
|
||||
Unsize,
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ use ty::subst::Substs;
|
||||
/// stored in `unsize` is `Foo<[i32]>`, we don't store any further detail about
|
||||
/// the underlying conversions from `[i32; 4]` to `[i32]`.
|
||||
///
|
||||
/// 3. Coercing a `Box<T>` to `Box<Trait>` is an interesting special case. In
|
||||
/// 3. Coercing a `Box<T>` to `Box<dyn Trait>` is an interesting special case. In
|
||||
/// that case, we have the pointer we need coming in, so there are no
|
||||
/// autoderefs, and no autoref. Instead we just do the `Unsize` transformation.
|
||||
/// At some point, of course, `Box` should move out of the compiler, in which
|
||||
|
@ -303,7 +303,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
|
||||
/// Same as applying struct_tail on `source` and `target`, but only
|
||||
/// keeps going as long as the two types are instances of the same
|
||||
/// structure definitions.
|
||||
/// For `(Foo<Foo<T>>, Foo<Trait>)`, the result will be `(Foo<T>, Trait)`,
|
||||
/// For `(Foo<Foo<T>>, Foo<dyn Trait>)`, the result will be `(Foo<T>, Trait)`,
|
||||
/// whereas struct_tail produces `T`, and `Trait`, respectively.
|
||||
pub fn struct_lockstep_tails(self,
|
||||
source: Ty<'tcx>,
|
||||
|
@ -74,7 +74,7 @@ impl<'a, 'tcx: 'a> VirtualIndex {
|
||||
/// The vtables are cached instead of created on every call.
|
||||
///
|
||||
/// The `trait_ref` encodes the erased self type. Hence if we are
|
||||
/// making an object `Foo<Trait>` from a value of type `Foo<T>`, then
|
||||
/// making an object `Foo<dyn Trait>` from a value of type `Foo<T>`, then
|
||||
/// `trait_ref` would map `T:Trait`.
|
||||
pub fn get_vtable<'tcx, Cx: CodegenMethods<'tcx>>(
|
||||
cx: &Cx,
|
||||
|
@ -256,7 +256,7 @@ fn initial_buffer_size(file: &File) -> usize {
|
||||
/// use std::fs;
|
||||
/// use std::net::SocketAddr;
|
||||
///
|
||||
/// fn main() -> Result<(), Box<std::error::Error + 'static>> {
|
||||
/// fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
|
||||
/// let foo: SocketAddr = String::from_utf8_lossy(&fs::read("address.txt")?).parse()?;
|
||||
/// Ok(())
|
||||
/// }
|
||||
@ -298,7 +298,7 @@ pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
|
||||
/// use std::fs;
|
||||
/// use std::net::SocketAddr;
|
||||
///
|
||||
/// fn main() -> Result<(), Box<std::error::Error + 'static>> {
|
||||
/// fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
|
||||
/// let foo: SocketAddr = fs::read_to_string("address.txt")?.parse()?;
|
||||
/// Ok(())
|
||||
/// }
|
||||
|
@ -8,7 +8,8 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Ensure that both `Box<Error + Send + Sync>` and `Box<Error>` can be obtained from `String`.
|
||||
// Ensure that both `Box<dyn Error + Send + Sync>` and `Box<dyn Error>` can be
|
||||
// obtained from `String`.
|
||||
|
||||
use std::error::Error;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user