gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:34:47 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com