Add generics
parent
593565c489
commit
1c9b0af2da
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "generics"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
@ -0,0 +1,55 @@
|
|||||||
|
use core::alloc;
|
||||||
|
|
||||||
|
struct List<T> {
|
||||||
|
list: Vec<T>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl List<usize> {
|
||||||
|
fn sum(&self) -> usize {
|
||||||
|
self.list.iter().sum()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl List<String> {
|
||||||
|
fn sum(&self) -> String {
|
||||||
|
let mut merged_string = String::new();
|
||||||
|
for element in &self.list {
|
||||||
|
merged_string.push_str(element.as_str());
|
||||||
|
}
|
||||||
|
merged_string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Point<T> {
|
||||||
|
x: T,
|
||||||
|
y: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Point<T> {
|
||||||
|
fn x(&self) -> &T {
|
||||||
|
&self.x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Point<f32> {
|
||||||
|
fn distance_from_origin(&self) -> f32 {
|
||||||
|
(self.x.powi(2) + self.y.powi(2)).sqrt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let list_one = List { list: vec![1, 2, 3, 4, 5] };
|
||||||
|
let list_two = List { list: vec![String::from("hello"), String::from(" world")] };
|
||||||
|
|
||||||
|
let sum = list_one.sum();
|
||||||
|
let merged = list_two.sum();
|
||||||
|
|
||||||
|
println!("Sum -> {}", sum);
|
||||||
|
println!("Merged -> {}", merged);
|
||||||
|
|
||||||
|
let p_one = Point { x: 5, y: 10 };
|
||||||
|
let p_two = Point { x: 5.0, y: 10.0 };
|
||||||
|
|
||||||
|
println!("p_one.x = {}", p_one.x());
|
||||||
|
println!("p_two.distance_from_origin = {}", p_two.distance_from_origin());
|
||||||
|
}
|
Loading…
Reference in New Issue