Из документов, то Index
черта определяется:Почему метод индекса требует права собственности?
pub trait Index<Idx> where Idx: ?Sized {
type Output: ?Sized;
fn index(&self, index: Idx) -> &Self::Output;
}
Поскольку тип параметра index
является Idx
, а не &Idx
, метод index
должен взять на себя ответственность значения, которое он проходит.
Есть ли причина для этого ограничения? Я знаю, что 9 раз из 10 будет использовать что-то вроде целочисленного типа, который выводит Copy
, но мне просто интересно, почему заимствованное значение будет менее способным действовать как индекс.
D'oh, это имеет смысл. Спасибо, что поняли это. – jobo3208
Если я не ошибаюсь, это именно то, что означает ограничение 'Idx:? Sized', is'nt it? – rodrigo
Планы Rust позволяют передавать динамически размерные типы * по значению * в функции, но это пока невозможно (с точки зрения Rust 1.4.0), поэтому почему ['FnBox'] (https: //doc.rust-lang .org/stable/std/boxed/trait.FnBox.html) существует. Когда это реализовано, 'Idx:? Sized' позволит использовать DST для' Idx'. –