rust - 如何在 Rust 中定义函数?

标签 rust

我决定用 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/

相关文章:

mysql - 我无法在 MariaDB 上使用 Diesel 进行绑定(bind)

rust - 如何在 Cargo.toml 中启用每个平台的 crate 功能?

debugging - Rust 和 Cyber​​DWARF 可以一起使用吗?

rust - RUST 中这些行之间有什么区别?

process - 如何在不阻塞Rust的情况下读取子进程的输出?

rust - 可变地传递一个不变地借用的变量

iterator - 如何返回包含枚举索引的二维数组的迭代器?

rust - 将外部值传递给闭包...错误 : capture of moved value

casting - 如何在 &[u8] 中写入 u32?

opengl - 在绘制到屏幕之前,opengl 纹理中的意外像素发生变化