[Rust] Use Impl with Struct
use anyhow::{Result, anyhow};
use std::str::FromStr;
fn get_input() -> &'static str {
return "0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2";
}
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
impl FromStr for Point {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self> {
let result = s.split_once(",");
if result.is_none() {
return Err(anyhow!("expected a point to contain a comma"));
}
let (x, y) = result.unwrap();
let x: i32 = str::parse(x)?;
let y: i32 = str::parse(y)?;
return Ok(Point {x, y})
}
}
#[derive(Debug)]
struct Line {
p1: Point,
p2: Point,
}
impl FromStr for Line {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self> {
let result = s.split_once(" -> ");
if result.is_none() {
return Err(anyhow!("expected line contains arrow"))
}
let (p1, p2) = result.unwrap();
let p1 = str::parse(p1)?;
let p2 = str::parse(p2)?;
return Ok(Line {p1, p2})
}
}
impl Line {
fn is_horv(&self) -> bool {
return self.p1.x == self.p2.x || self.p1.y == self.p2.y
}
}
fn main() {
let lines = get_input()
.lines()
.flat_map(str::parse) // Remove Result type by using flat_map
.filter(|x: &Line| x.is_horv())
.collect::<Vec<Line>>();
println!("{:?}", lines)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2023-02-19 [State Machine] Zag-js
2023-02-19 [React] React hook, component props for refactoring
2020-02-19 【逻辑思维】排中律:生存还是毁灭,只能选一个
2020-02-19 【逻辑思维】矛盾律:谁给理发师理发
2020-02-19 [AST Babel] Create a simple babel plugin
2020-02-19 [Angular 8 Unit testing] Testing a smart component with service injection -- 1
2019-02-19 [React] Ensure all React useEffect Effects Run Synchronously in Tests with react-testing-library