fn read() -> Result<(), io::Err> {
//let vec: Vec<u8> = !vec[2, 5, 8, 10, 15, 16];
let pos1 = self.responce.iter().position(|&el| el == 8).ok_or_else(||io::Err::new("understading message"))?;
let pos2 = self.responce.iter().position(|&el| el == 15).ok_or_else(||io::Err::new("understading message"))?;
let pos3 = self.responce.iter().position(|&el| el == 12).ok_or_else(||io::Err::new("understading message"))?;
return Ok(());
}
self.on_event_closure
.entry(event)
.or_insert_with(Vec::new)
.and_modify(move |vec| vec.push(f));
let a_ : &mut[u8] = &mut a;
Во-первых, что значит последняя строчка? как это расшифровать?
rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu
pub struct Animal {
pub name: String,
pub age: i32,
pub strength: i32,
}
pub struct Person {
pub name: String,
pub age: i32,
pub strength: i32,
}
// Выделяем новый трейт, который позволяет получить силу
trait Strength {
fn strength(&self) -> i32;
}
trait BaseTrait {
fn init(&self);
// В старом трейте принимаем target по ссылке и ограничиваем, что принимаем только такой target, который реализует trait Strength
fn stronger_than<T>(&self, target: &T) -> bool
where
T: Strength;
}
impl Strength for Person {
fn strength(&self) -> i32 {
self.strength
}
}
impl Strength for Animal {
fn strength(&self) -> i32 {
self.strength
}
}
impl BaseTrait for Person {
fn init(&self) {
println!("Hello, im Person: {}", self.name);
}
fn stronger_than<T>(&self, enemy: &T) -> bool
where
T: Strength,
{
self.strength > enemy.strength() // вызываем метод, вместо обращения к полю
}
}
impl BaseTrait for Animal {
fn init(&self) {
println!("Hello, im Animal: {}", self.name);
}
fn stronger_than<T>(&self, enemy: &T) -> bool
where
T: Strength,
{
self.strength > enemy.strength()
}
}
fn main() {
let person = Person {
name: String::from("John"),
age: 25,
strength: 12,
};
let animal = Animal {
name: String::from("Elephant"),
age: 5,
strength: 360,
};
person.init();
animal.init();
if person.stronger_than(&animal) {
println!("Person is stronger than animal");
}
if animal.stronger_than(&person) {
println!("Animal is stronger than person")
}
}
macro_rules! macro {
(5) => {compile_error! ("5 is unacceptable")}
}
[package]
name = "windows_key_press"
version = "0.1.0"
edition = "2021"
[dependencies.windows]
version = "0.37.0"
features = ["Win32_UI_Input_KeyboardAndMouse"]
use std::thread;
use windows::Win32::UI::Input::KeyboardAndMouse::{GetKeyState};
fn main() {
const VK_SPACE: i32 = 0x20;
const HIGHER_ORDER_BIT: i16 = -128;
loop {
let state = unsafe { GetKeyState(VK_SPACE) };
let is_up = state & HIGHER_ORDER_BIT == 0;
println!("{}", is_up);
thread::sleep(std::time::Duration::from_millis(100));
}
}
missing tokens in macro arguments
macro_rules! name {
($t: ty, $({$($el:expr ),*}),*) => {42};
}
fn main() {
name!(i32, {1, 2, 3 ,4}, {1,2});
}
#[get("/index")]
pub async fn index() -> impl Responder {
let path = Path::new("test.txt");
spawn_blocking(|| cat(path)).await?
}
fn cat(path: &Path) -> io::Result<String> {
let mut f = File::open(path)?;
let mut s = String::new();
match f.read_to_string(&mut s) {
Ok(_) => Ok(s),
Err(e) => Err(e),
}
}
[dependencies]
reqwest = { version = "0.11", features = ["blocking", "json"] } #blocking - только для примера, чтобы не нагружать await-ами. json - чтобы добавить возможность десериализации ответа при помощи serde-json
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("https://httpbin.org/ip")?
.json::<HashMap<String, String>>()?; // Тут нужно подставлять тот тип, который реализует трейт Deserialize
println!("{:#?}", resp);
Ok(())
}
Во первых, почему указатели в Rust называются ссылками?
Вот как это вместить - после плюсов вызывает неприязнь.
Rust появился в 2006
на данное время крупных проектов использующие его (кроме дискорда) нет