我决定用 Rust 做二维向量叉积。在 JavaScript 中,这很容易做到:
float CrossProduct( const Vec2& a, const Vec2& b ) {
return a.x * b.y - a.y * b.x;
}
我尝试将其转换为 Rust 系统:
// Just created two separate variables for the two different vectors
let vec1 = vec![1.15, 7.0];
let vec2 = vec![7.0, 2.0];
let cross_product(&vec1, &vec2) = vec1[0] * vec2[1] - vec1[1] * vec2[0];
println!("{}", cross_product);
// I also tried return.
let vec1 = vec![1.15, 7.0];
let vec2 = vec![7.0, 2.0];
let cross_product(&vec1, &vec2) {
return (vec1[0] * vec2[1] - vec1[1] * vec2[0]);
}
println!("{}", cross_product);
我认为其中一个会起作用,但是这对我来说更像是一个现实检查,Rust 与我以前使用过的任何语言有何不同。
我发现了一种非常低效的方法来解决这个问题,但我宁愿学会正确地做到这一点。我是 Rust 的新手,所以请对我的尝试持保留态度。
最佳答案
有两种方法可以做到这一点。
第一种方式
您可以声明一个函数并将其传递给 println!()
,这类似于许多编程语言,如 Java、C# 等。
// Declare the function
fn cross_product(slice1: &[i32], slice2: &[i32]) -> i32 {
slice1[0] * slice2[1] - slice1[1] * slice2[2]
}
// Use it Like following
fn main() {
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
println!("{}", cross_product(&vec1[..], &vec2[..]));
}
第二种方式
您可以声明一个闭包并将其传递给 println!()
,这是函数式编程中的一种常用方法:
// You can declare a closure and use it as function in the same code block
fn main() {
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let cross_product = |slice1: &[i32], slice2: &[i32]| -> i32 {
let result = slice1[0] * slice2[1] - slice1[1] * slice2[2];
result
};
println!("{}", cross_product(&vec1[..], &vec2[..]));
}
请注意,我使用 i32
数据类型创建了向量和闭包,它对应于一个整数。您可以使用 f32
更改类型,或者如果您想要更宽的浮点范围 f64
。
关于rust - 如何在 Rust 中定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54248024/