2015-06-30 3 views
3

Я хочу знать, что произойдет, если вы сделаете это:Где находится документация Rust для реализации признаков?

use std::collections::HashMap; 

fn main() { 
    let mut hm: HashMap<i32, i32> = HashMap::new(); 
    hm.insert(1, 2); 
    let foo = hm[&100]; // Not in the map. 
} 

Я предполагаю, что я могу узнать, проверив ее, но если я хочу узнать из документации, где это говорит?

Если я перехожу на HashMap page, у него есть ссылка для impl Index, которая, как я полагаю, является соответствующим кодом, но это только что идет this generic Index documentation.

Это не ограничивается HashMap. Кажется, я не могу найти документацию для каких-либо реализаций признаков - только для самих признаков.

+1

Неясно, что вам не хватает здесь. Документация индекса «Trait» дает вам подпись метода, который (должен) содержать все, что вам нужно. Что вы ожидаете найти за пределами подписи метода? –

+0

Если вы посмотрите на ответ Криса, вы увидите, что мне не хватает документации, например: «Если ключ не присутствует в этой операции, паника». Вы не можете сказать это из подписи. – Timmmm

+0

Я знаю, мне просто интересно, это то, что вы искали или нет. Вы также могли бы задаться вопросом о сложности * (время/память) и т. Д. Есть * много вещей *, которые скрыты подписи типа, что делает ваш вопрос довольно широким (хотя я бы не стал его закрывать). –

ответ

5

There is no further documentation for that implementation. Подпись все, что вы получите:

#[stable(feature = "rust1", since = "1.0.0")] 
impl<'a, K, Q: ?Sized, V, S> Index<&'a Q> for HashMap<K, V, S> 
    where K: Eq + Hash + Borrow<Q>, 
      Q: Eq + Hash, 
      S: HashState, 
{ 
    type Output = V; 

    #[inline] 
    fn index(&self, index: &Q) -> &V { 
     self.get(index).expect("no entry found for key") 
    } 
} 

Это характерно, хотя это не особенно хорошо.

+0

Хотя это правда, этот ответ очень специфичен для примера «HashMap», в то время как OP спрашивает о чертах вообще. [Ответ от Владимира Матвеева] (http://stackoverflow.com/a/31138538/155423) указывает, что вы * можете * документировать детали реализации признака, но не детали реализации метода признаков. – Shepmaster

4

С помощью этого кода:

/// A public trait with a method. 
pub trait Trait { 
    /// This method does something. 
    fn method(&self); 
} 

/// A public structure. 
pub struct X; 

/// An implementation of `Trait` for `X`. 
impl Trait for X { 
    /// This method does something specific for `X`. 
    fn method(&self) {} 
} 

rustdoc генерирует следующую документацию для X:

doc page

Вы можете увидеть, что документация реализации методы теряется, но документация реализации черты хранится неповрежденными.

Поэтому для авторов библиотек вопрос о том, пишут ли они документацию по внедрению признаков, это вопрос. Если они это сделают, вы можете найти их в разделе реализации признаков; если они этого не сделают, ну, в любом случае вы нигде не можете найти его. В этом конкретном случае реализация Index для HashMap не документирована.

(Это, вероятно, имеет смысл открыть вопрос Agains rustdoc добавить способность генерировать документацию для реализованных методов из признаков, если нет таких проблем пока нет.)

+0

[Номер вопроса 24838] (https: // github.com/rust-lang/rust/issues/24838), по-видимому, отслеживает это в течение нескольких недель. Думаю, никто не позаботился об этом. – aepsil0n

Смежные вопросы