は、Index
traitが定義されている:`Index`特性の` Idx`型のパラメータはなぜunsizeされていますか?次のように錆1.14で
pub trait Index<Idx> where Idx: ?Sized {
type Output: ?Sized;
fn index(&self, index: Idx) -> &Self::Output;
}
Output
タイプの束縛暗黙のSized
はここ?Sized
と緩和されています。これは意味があります。index()
メソッドはOutput
への参照を返します。したがって、unsized型を使うことができます。これは便利です。例:
impl<T> Index<Range<usize>> for Vec<T> {
type Output = [T]; // unsized!
fn index(&self, index: Range<usize>) -> &[T] { … } // no problem: &[T] is sized!
}
Idx
タイプパラメータの暗黙的な境界も緩和され、サイズを変更できます。しかし、Idx
はメソッドの引数として値によって使用され、引数としてunsized型を使用することはAFAIKでは不可能です。 Idx
はサイズを変更できますか?
いつものようにすばらしい答え! – mcarton
*いつかは、動的サイズの型(DST)を値で渡すこともできますが、私は理解できません。* =>言語と実装には違いがあります。言語が移動(値渡し)を考慮しているということは、ABIレベルでは値がポインタによって渡されないことを意味するものではありません。したがって、実際の実装ではポインターが使用されているため、言語がDSTに値を渡すことは完全に賢明です。しかし、価値によってそれらを返すことは、よりトリッキーなようです:) –