美文网首页
rust函数

rust函数

作者: Wu杰语 | 来源:发表于2022-02-13 21:52 被阅读0次

学习rust函数,就需要从范式的角度学习,rust参照的范式有函数式、泛型、面向对象,这里的面向对象并非存粹的面向对象。

rust函数式范式

函数本身是一种类型


fn main() {
  let func: IncType = inc;
  println!("3 + 1 = {}", func(3));
  println!("3 + 1 = {}", inc(3));
}

type IncType = fn(i32) -> i32;

fn inc(n: i32) -> i32 {
  n + 1
}

如上例子,inc是一种fn(i32)-> i32的类型,可以赋值将inc赋值给该种类型

函数式中函数可作为返回值,即高阶函数

fn main() {
  let func = make_inc();
  println!("3 + 1 = {}", func(3));
}


fn make_inc() -> fn(i32) -> i32 {
    fn inc(n: i32) -> i32 {
        n + 1
    }
    inc
}

fn math(op: fn(i32, i32) -> i32, a: i32, b: i32) -> i32 {
    op(a, b)
}

fn sum(a: i32, b: i32) -> i32 {
    a + b
}

fn product(a: i32, b: i32) -> i32 {
    a * b
}

fn main() {
    let (a, b) = (2, 3);
    println!("sum {}", math(sum, a, b));
    println!("product {}", math(product, a, b));
}

然后就是函数式的map、filter、fold套件


fn is_odd(n: u32) -> bool {
    n % 2 == 1
}

fn main() {
    let sum_of_squared_odd_numbers: u32 =
        (0..5).map(|n| n * n)             // 所有自然数取平方
             .filter(|&n| is_odd(n))     // 取奇数
             .fold(0, |sum, i| sum + i); // 最后加起来
    println!("functional style: {}", sum_of_squared_odd_numbers);
}

面向对象和泛型

rust的面向对象是假的面向对象,基于泛型实现,是一种Ad-hoc的多态,使用泛型实现。但是由于rust的实现都是在静态编译期确定类型,各种类型在编译器也就确定了,是一种类型推导过程,而并非面向对象思想中的运行期间确定多态。
例如:

#[derive(Debug, PartialEq)]
struct Foo(i32);
#[derive(Debug, PartialEq)]
struct Bar(i32, i32);
trait Inst {
    fn new(i: i32) -> Self
}

impl Inst for Foo {
    fn new(i: i32) -> Foo {
        Foo(i)
    }
}

impl Inst for Bar {
    fn new(i: i32) -> Bar {
        Bar(i, i + 10)
    }
}

fn foobar<T: Inst>(i: i32) -> T {
    T::new(i)
}

fn main() {
    let f: Foo = foobar(10);
    println!("{}", f);
    let b: Bar = Bar(10);
    println!("{}", b);
}

小结

rust语言也是参考了多种语言实现,实现了多种范式,抓住这些范式可以减少学习负担。

相关文章

  • Rust语言编程实例100题-059

    Rust语言编程实例100题-059 题目:Rust高阶函数练习。高阶函数是指以函数为参数或者返回值的函数,是函数...

  • Rust语言编程实例100题-060

    Rust语言编程实例100题-060 题目:Rust高阶函数练习。高阶函数是指以函数为参数或者返回值的函数,是函数...

  • Rust基础学习-04-函数和表达式

    函数的定义 Rust 函数的定义是以 fn 开头,main 函数是Rust程序的入口函数 表达式 语句,是执行一些...

  • Rust 学习笔记 - 函数

    Rust 是一门多范式的编程语言,但 Rust 的编程风格是更偏向于函数式的,函数在 Rust 中是“一等公民”。...

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • RUST 学习日记 第19课 ——函数(二)

    RUST 学习日记 第19课 ——函数(二) 0x00 回顾与开篇 上节初步了解了Rust的函数,这节课继续介绍...

  • 3.3 函数

    Rust 中的函数定义以 fn 开始并在函数名后跟一对圆括号。大括号告诉编译器哪里是函数体的开始和结尾。 Rust...

  • Rust 函数

    函数遍布于 Rust 代码中。你已经见过语言中最重要的函数之一:main函数,它是很多程序的入口点。你也见过fn关...

  • Rust 函数

    函数 函数定义以 fn 开始并在函数名后面跟一对圆括号。大括号告诉编译器函数的开始和结尾。可以使用函数名后跟圆括号...

  • rust函数

    学习rust函数,就需要从范式的角度学习,rust参照的范式有函数式、泛型、面向对象,这里的面向对象并非存粹的面向...

网友评论

      本文标题:rust函数

      本文链接:https://www.haomeiwen.com/subject/pxdqlrtx.html