Articles of rust

Posso digitar introspecção com objects de traço e, em seguida, reduzi-lo?

Eu tenho uma coleção de características, uma function que itera sobre ela e faz algo, e então eu gostaria de verificar o tipo de implementador e se é do tipo Foo seguida, downcast e chamar algum método Foo. Basicamente, algo semelhante ao tipo de switch e à conversão de interface do Go. Pesquisando em torno […]

Retornando um fechamento de uma function

Nota : Esta pergunta foi feita antes da primeira versão estável do Rust. Houve muitas mudanças desde então e a syntax usada na function não é mais válida. Ainda assim, a resposta do Shepmaster é excelente e faz essa pergunta valer a pena. Finalmente, encerramentos sem checkbox chegaram, então estou experimentando com eles para ver […]

Como obter uma fatia como uma matriz em Rust?

Eu tenho uma matriz de tamanho desconhecido e gostaria de obter uma fatia dessa matriz e convertê-la em uma matriz de tamanho estaticamente: fn pop(barry: &[u8]) -> [u8; 3] { barry[0..3] // mismatched types: expected `[u8, ..3]` but found `&[u8]` } Como eu faria isso?

Por que um empréstimo ainda é mantido no bloco else de um if let?

Por que a chamada self.f2() no código a seguir self.f2() o verificador de empréstimo? O bloco else não está em um escopo diferente? Isso é um grande enigma! use std::str::Chars; struct A; impl A { fn f2(&mut self) {} fn f1(&mut self) -> Option { None } fn f3(&mut self) { if let Some(x) = […]

Derivar um traço resulta em erro inesperado do compilador, mas a implementação manual funciona

Este código ( playground ): #[derive(Clone)] struct Foo { t: &’a T, } fn bar(foo: Foo) { foo.clone(); } … não compila: error: no method named `clone` found for type `Foo` in the current scope –> :7:9 |> 16 |> foo.clone(); |> ^^^^^ note: the method `clone` exists but the following trait bounds were not […]

Por que uma característica não é implementada para um tipo que claramente a implementa?

Eu estou tentando usar Diesel para consultar um database MySQL e exibir os resultados com um modelo de guiador com Rocket . Eu tenho isso em models.rs #[derive(Queryable, Serialize)] pub struct Post { pub id: i32, pub title: String, pub text: String, pub published: bool, } cargo run gera isso: –> src/main.rs:69:5 | 69 | […]

Qual é a diferença entre colocar “mut” antes de um nome de variável e depois de “:”?

Aqui estão duas assinaturas de funções que vi na documentação do Rust: fn modify_foo(mut foo: Box) { *foo += 1; *foo } fn modify_foo(foo: &mut i32) { *foo += 1; *foo } Por que o posicionamento diferente de mut ? Parece que a primeira function também pode ser declarada como fn modify_foo(foo: mut Box) { […]

Como faço para criar uma coleção heterogênea de objects?

Eu quero usar objects de traço em um Vec . Em C ++ eu poderia fazer uma class de base Thing da qual é derivada Monster1 e Monster2 . Eu poderia então criar um std::vector . Objetos de Thing devem armazenar alguns dados, por exemplo, x : int, y : int , mas as classs […]

Erro “Expected type parameter” no construtor de uma estrutura genérica

Eu estou tentando armazenar texturas de pistão em uma estrutura. struct TextureFactory where R: gfx::Resources { block_textures: Vec<Rc<Texture>>, } impl TextureFactory where R: gfx::Resources { fn new(window: PistonWindow) -> Self { let texture = Rc::new(gfx_texture::Texture::from_path( &mut *window.factory.borrow_mut(), “assets/element_red_square.png”, Flip::None, &TextureSettings::new() ).unwrap()); let block_textures = Vec::new(); block_textures.push(texture); TextureFactory { block_textures: block_textures, } } } Isso não […]

Por que tentar () e? não compila quando usado em uma function que não retorna Resultado?

Por que esse código não compila? use std::{fs, path::Path}; fn main() { let dir = Path::new(“../FileSystem”); if !dir.is_dir() { println!(“Is not a directory”); return; } for item in try!(fs::read_dir(dir)) { let file = match item { Err(e) => { println!(“Error: {}”, e); return; } Ok(f) => f, }; println!(“”); } println!(“Done”); } Este é o […]