【RUST学习日记】第19课 函数(二)

简介: 【RUST学习日记】第19课 函数(二)

0x00 回顾与开篇


上一篇文章初步了解了Rust的函数,这节课继续介绍Rust的高阶函数——函数作为参数和函数作为返回值的两种形式。


0x01 type定义别名


在Rust中,我们可以使用type关键字来为Rust的原始类型或者自定义类型定义别名。

示例代码如下:

type Int = i32;
    type Float = f32;
    type Double = f64;
    type Char = char;
    let a: Int = 3;
    let b: Float = 4.5;
    let c: Double = 134.6753453424234231;
    let d: Char = '我';
    dbg!(a);
    dbg!(b);
    dbg!(c);
    dbg!(d);

代码运行结果:

a = 3b = 4.5c = 134.6753453424234d = '我'

上面的代码可以看到,咱们把i32类型定义别名为Int类型,f32类型定义别名为Float类型,f64类型定义别名为Double类型,char类型定义别名为Char类型。


0x02 函数作为参数


当Rust的函数作为参数时,建议使用type关键字为函数指针类型定义别名。其目的是为了提升代码的可读性。下面我通过一个例子讲解将函数作为参数的例子。

/// 函数声明别名type Calc = fn(i32, i32) -> i32;/// 操作运算(别名)fn operation_alias(calc: Calc, a: i32, b: i32) -> i32 {
    return calc(a, b);}/// 操作运算fn operation(calc: fn(i32, i32) -> i32, a: i32, b: i32) -> i32 {
    return calc(a, b);}/// 加法fn add(a: i32, b: i32) -> i32 {
    return a + b;}/// 乘法fn mul(a: i32, b: i32) -> i32 {
    return a * b;}fn main() {
    let a = 5;
    let b = 3;
    let add_result = operation_alias(add, a, b);
    let mul_result = operation(mul, a, b);
    dbg!(add_result);
    dbg!(mul_result);}

代码运行结果:

add_result = 8mul_result = 15

代码解释:


首先,使用type关键字为函数指针类型fn(i32,i32)->i32起一个别名为Calc。然后又定义了一个函数operation_alias,它有三个参数,其中第一个参数为Calc类型,第二个和第三个参数是i32类型。紧接着又定义了一个函数operation,它也有三个参数,与operation_alias一样。不同的是,operation的第一个参数没有使用别名,而是使用了原始的函数指针类型,在可读性上可能比较差。最后按照fn(i32,i32)->i32形式,分别定义了add和mul函数来计算加法和乘法。


main函数中,分别调用operation_alias和operation方法,计算a和b的值。


0x03 函数作为返回值


当Rust的函数作为返回值时,建议使用type关键字为函数指针类型定义别名。其目的是为了提升代码的可读性。下面我通过一个例子讲解将函数作为返回值的例子。

/// 函数声明别名type Calc = fn(i32, i32) -> i32;/// 根据字符串获取函数(别名)fn get_operation_alias(s: &str) -> Calc {
    if s == "add" {
        add    } else {
        mul    }}/// 根据字符串获取函数fn get_operation(s: &str) -> fn(i32, i32) -> i32 {
    if s == "add" {
        add    } else {
        mul    }}/// 加法fn add(a: i32, b: i32) -> i32 {
    return a + b;}/// 乘法fn mul(a: i32, b: i32) -> i32 {
    return a * b;}fn main() {
    let a = 4;
    let b = 6;
    let add_result = get_operation_alias("add")(a, b);
    let mul_result = get_operation("mul")(a, b);
    dbg!(add_result);
    dbg!(mul_result);}

代码运行结果:

add_result = 10mul_result = 24

代码解释:

首先,使用type关键字为函数指针类型fn(i32,i32)->i32起一个别名为Calc。然后又定义了一个函数get_operation_alias,它只有一个参数,根据参数返回指定的函数。紧接着又定义了一个函数get_operation,它也只有一个参数,与get_operation_alias一样。不同的是,get_operation的返回值使用了原始的函数指针类型,在可读性上可能比较差。最后按照fn(i32,i32)->i32形式,分别定义了add和mul函数来计算加法和乘法。

main函数中,分别调用get_operation_alias和get_operation方法,计算a和b的值。


0x04 小结


本节介绍了Rust高阶函数的两种形式——函数作为参数和函数作为返回值。当函数作为参数或者作为返回值时,建议使用type类型定义别名。

相关文章
|
3月前
|
存储 Rust 程序员
rust中的函数:定义、调用与闭包
本文将深入探讨Rust编程语言中函数的定义、调用方式,以及闭包(closures)的概念和应用。我们将从函数的基本语法出发,逐步深入到函数的参数传递、返回值,再进一步介绍闭包及其捕获环境的能力,帮助读者全面理解并熟练运用Rust中的函数与闭包。
|
3月前
|
JSON Rust IDE
全网最全的Rust学习资源
学习Rust过程中整理了一些学习资料分享一下。
109 1
|
4月前
|
Rust
Rust编程语言:探索性学习与实践指南
Rust编程语言:探索性学习与实践指南
35 0
|
4月前
|
Rust Java 编译器
【一起学Rust | 基础篇】rust函数与流程控制详解
【一起学Rust | 基础篇】rust函数与流程控制详解
51 0
【一起学Rust | 基础篇】rust函数与流程控制详解
|
4月前
|
Rust 编译器
【一起学Rust】Rust学习前准备——注释和格式化输出
【一起学Rust】Rust学习前准备——注释和格式化输出
39 0
|
5月前
|
Rust
Rust编程语言:探索性学习与实践指南
Rust编程语言:探索性学习与实践指南
32 0
|
5月前
|
Rust 前端开发 安全
致所有渴望学习Rust的人的信
致所有渴望学习Rust的人的信
|
6月前
|
Rust 安全 编译器
Rust 基础入门 —— 函数
当用 ! 作函数返回类型的时候,表示该函数永不返回( diverge function ),特别的,这种语法往往用做会导致程序崩溃的函数:
23 0
|
存储 JSON Rust
【RUST学习日记】第22课 结构体(上)
【RUST学习日记】第22课 结构体(上)
|
Rust C语言 Windows