Rust-定义函式Function(三)

提前退出

正常情况是必须达到函示的末尾,但是如果编写包含许多语法的函式通常会在意识到没有更多计算要做时因此需要提前退出该函式

fn f(x: i32) -> i32 {
    if x <= 0 {
        return 0;
    }

    return x * 5;
}

println!("{} {}", f(10), f(0))

输出
50 0

返回多个值

如果要从函式返回多个值,可以使用元组型别

fn f(x: i32) -> (i32, i32) {
    return (x * 5, 10);
}

println!("{:?}", f(10))

输出
(50, 10)

或是也可以用返回结构,元组结构,数组或是向量来返回多个

更改调用者的变数

假设有个包含数字的数组,要更改其中的数字

fn f(mut a: [i32; 5]) {
    for i in 0..5 {
        if a[i] > 0 {
            a[i] *= 2;
        }
    }
}

let mut arr = [5, -1, 2, -2, 8];
f(arr);
println!("{:?}", arr);

输出
[5, -1, 2, -2, 8]

可以看到并没有改变数组,并且在编译时出现警告variable does not need to be mutable

告诉我们mut声明arr之後却没有改变可以移除

比较麻烦的作法,可以透过回传值回传一个新的数组,缺点就是数组会复制两次

fn f(mut a: [i32; 5]) -> [i32; 5] {
    for i in 0..5 {
        if a[i] > 0 {
            a[i] *= 2;
        }
    }

    return a;
}

let mut arr = [5, -1, 2, -2, 8];
arr = f(arr);
println!("{:?}", arr);

输出
[10, -1, 4, -2, 16]

可以透过引用传递参数的方式来改变数组

fn f(a: &mut [i32; 5]) {
    for i in 0..5 {
        if (*a)[i] > 0 {
            (*a)[i] *= 2;
        }
    }
}

let mut arr = [5, -1, 2, -2, 8];
f(&mut arr);
println!("{:?}", arr);

输出
[10, -1, 4, -2, 16]

透过&符号来表示物件记忆体位址,而使用*符号表示记忆体位址的物件

通过型别宣告&mut [i32; 5]指定它是物件的地址(可以称为指针Pointer或是引用reference)

这边的使用跟C++使用很像,区别是Rust还允许显式的取消引用可以省略*符号

这个函式等同於上面

fn f(a: &mut [i32; 5]) {
    for i in 0..5 {
        if a[i] > 0 { // 省略了*
            a[i] *= 2; // 省略了*
        }
    }
}

let mut arr = [5, -1, 2, -2, 8];
f(&mut arr);
println!("{:?}", arr);

输出
[10, -1, 4, -2, 16]

<<:  e是咱ㄟ宝贝

>>:  [Day 11] 利用webpack安装Vuetify

D6 第三周 (回忆篇)

这礼拜进度比较快写到 week4 的作业。看了一下 fetch API 的东西,$.ajax(), ...

[15] 建立 class 创建实例的继承

考量到要建立各种 class 所以统一建立一个 class 给所有人继承 可以直接跳过,但注意之後有...

Docker

1. 使用浏览器 DSM 套件中心安装需要的开发相关套件,这边我安装 Docker 跟 Node.j...

[ JS个人笔记 ] 闭包Closure—DAY6

简单来说,就是呼叫函式内的函式,将记忆体封存在内层。 像这样,我们把 count 封装在 coun...

css float

float称为浮动元素,可以想像是加上这个元素的物体都会飘浮在空中 接下来示范一些用法来认识这个元素...