这个Python代码最接近的等效Rust代码是什么?
a, b = 1, 2
a, b = b, a + b
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个迭代的Fibonacci函数.我有Python代码我想转换为Rust.一切都很好,除了交换部分.
def fibonacci(n):
if n < 2:
return n
fibPrev = 1
fib = 1
for num in range(2, n):
fibPrev, fib = fib, fib + fibPrev
return fib
Run Code Online (Sandbox Code Playgroud) 我想构造一个元组并将结果的一部分分配给一个新变量,并将结果的另一部分分配给现有的.
以下代码说明了intent(这是一个导致无限循环打印的愚蠢示例[0]):
fn main() {
let mut list = &[0, 1, 2, 3][..];
while !list.is_empty() {
let (head, list) = list.split_at(1);
// An obvious workaround here is to introduce a new variable in the above
// let statement, and then just assign it to list.
println!("{:?}", head);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码创建一个新变量,list而不是重新分配它.
如果我将代码更改为以下(为了避免let引入新list变量),它不会编译:
fn main() {
let mut list = &[0, 1, 2, 3][..];
while !list.is_empty() {
let head;
(head, list) = list.split_at(1);
println!("{:?}", …Run Code Online (Sandbox Code Playgroud) 如果我有以下结构:
struct MyStruct { tuple: (i32, i32) };
Run Code Online (Sandbox Code Playgroud)
并具有以下功能:
// This will not compile
fn function(my_struct: &mut MyStruct) {
let (val1, val2) = my_struct.tuple;
val1 = 1;
val2 = 2;
}
Run Code Online (Sandbox Code Playgroud)
我如何借用val1和val2作为可变因此当我重新分配它们时,更改出现在原始结构中?
rust ×3