Functional programming 如何连接JavaScript';什么是解构?

Functional programming 如何连接JavaScript';什么是解构?,functional-programming,rust,concat,Functional Programming,Rust,Concat,我想做一个函数,它接收一个Vec和一个改变数字的位置 在JavaScript中,这非常简单: function replaceNumber(line, position, number) { return [ ...line.slice(0, position), number, ...line.slice(position+1, line.length) ] } 如何在Rust中实现类似的功能 我试过这个: fn replace_number(line: Ve

我想做一个函数,它接收一个
Vec
和一个改变数字的位置

在JavaScript中,这非常简单:

function replaceNumber(line, position, number) {
  return [
    ...line.slice(0, position),
    number,
    ...line.slice(position+1, line.length)
  ]
}
如何在Rust中实现类似的功能

我试过这个:

fn replace_number(line: Vec<i32>, point: i32, number: i32) -> Vec<i32> {
    return [
        &line[0..point as usize],
        &[number],
        &line[point as usize+1, point.len()]
    ].concat();
}
fn替换\u编号(行:Vec,点:i32,编号:i32)->Vec{
返回[
&行[0..点为usize],
&[编号],
&直线[点为usize+1,点为.len()]
].concat();
}
结果是一个数组数组。如何进行类似JavaScript示例的分解

我想做一个函数,它接收一个Vec和一个改变数字的位置

Rust具有索引语法,就像JavaScript一样,因此实际上不需要进行分解

fn replace_number(mut line: Vec<i32>, point: usize, number: i32) -> Vec<i32> {
    line[point] = number;
    line
}
如果您确实需要类似JS语法的东西,可以使用:

fn替换\u编号(行:&[i32],点:usize,编号:i32)->Vec{
[&行[…点],&[数],&行[点+1..].concat()
}
另见:

我想做一个函数,它接收一个Vec和一个改变数字的位置

Rust具有索引语法,就像JavaScript一样,因此实际上不需要进行分解

fn replace_number(mut line: Vec<i32>, point: usize, number: i32) -> Vec<i32> {
    line[point] = number;
    line
}
如果您确实需要类似JS语法的东西,可以使用:

fn替换\u编号(行:&[i32],点:usize,编号:i32)->Vec{
[&行[…点],&[数],&行[点+1..].concat()
}
另见:


我想知道关于不变性的知识。我将更改函数名。在rust中使用可变变量是否是一种良好的做法?我认为这“是可能的,但不好用”。“我错了?”雷纳托卡西诺说,这不是一个容易回答的问题。在JS中避免可变性的原因是什么?你知道为什么易变性会导致问题吗?Rust以不同的方式解决了许多(但不是全部)这些问题。我想了解不变性。我将更改函数名。在rust中使用可变变量是否是一种良好的做法?我认为这“是可能的,但不好用”。“我错了?”雷纳托卡西诺说,这不是一个容易回答的问题。在JS中避免可变性的原因是什么?你知道为什么易变性会导致问题吗?生锈以不同的方式解决了许多(但不是全部)问题。
fn replace_number(line: Vec<i32>, point: i32, number: i32) -> Vec<i32>
fn replace_number(line: &[i32], point: usize, number: i32) -> Vec<i32> {
    let mut line = line.to_owned();
    line[point] = number;
    line
}
fn replace_number(line: &[i32], point: usize, number: i32) -> Vec<i32> {
    [&line[..point], &[number], &line[point + 1..]].concat()
}