rust - 如何在 Rust 中定义函数?
问题描述
我决定在 Rust 中做 2D 矢量叉积。在 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 的新手,所以请对我的尝试持保留态度。
解决方案
看起来您主要是在使用 Rust 语法时遇到问题。您可以创建叉积函数或内联执行叉积。
let vec1 = vec![1.15, 7.0];
let vec2 = vec![7.0, 2.0];
let cross_product = vec1[0] * vec2[1] - vec1[1] * vec2[0];
println!("{}", cross_product);
如果你想要一个功能,你可以不断地使用。
fn function_cross_product(vec1: Vec<f64>, vec2: Vec<f64>) -> f64 {
return vec1[0] * vec2[1] - vec1[1] * vec2[0];
};
let other_product = function_cross_product(vec1, vec2);
println!("{}", other_product);
第二种解决方案可能会产生误导,因为即使您传递不同大小的向量,它也总是会产生 2x2 向量的叉积。
推荐阅读
- c# - MainForm.cs 在 Windows 10 上的 VS 2010 C# 中都搞砸了?
- logging - 为什么空值出现在 solr.log 的第一行
- corda - 无法从 intellij 运行 CordaV4
- docker - 如何使用自定义变量运行 docker 容器(使用 Jenkins 构建)
- php - 使用 PHP 和 FPDF 创建 PDF 文件时未获取所有列值
- algorithm - 插入时排序数组或使用堆是否更快
- android - 将发送到 Web 服务的指纹与存储在数据库中的样本进行比较
- c# - 使用 Windows 服务执行的子进程中的 DirectX
- json - 在 Angular 6 中使用递归的树结构
- php - 在特定路由上禁用 Cookie - Laravel 5.7