• 【Rust】function和methed的区别



    一句话总结:
    function和methed很多都是相同的。

    不同点在于:

    • methed定义在结构体里面,并且它的第一个参数肯定是self,代表结构体实例。方法需要用实例名.方法名调用
    • 当然结构体里面的函数也可以没有self关键字,该函数被称为关联函数,可以通过结构体名::函数名的方式调用。
      详细介绍接用法,请看下文。

    function

    1、使用fn关键字声明。
    2、使用snake case(下划线)命名风格。
    3、rust语言中,function只要定义了就行,不管它在调用位置前定义或者在调用位置之后。如下:

    fn main() {
        println!("Hello, world!");
    
        another_function();
    }
    
    fn another_function() {	// 采用snake case命名风格
        println!("Another function.");
    }
    

    4、statements是语句,用于执行一些指令,但是没有返回值,所以不能用于赋值。比如不能有这样的语句 x=y=6,这是因为赋值操作是没有返回值的。
    5、expression是表达式,它是有返回值的。
    6、对于一个代码块,如果最后一行代码,使用分号结尾了,则表明这是一条语句,是不能作为返回值的。如果没有分号结尾则可以作为函数返回值

    fn main() {
        println!("Hello, world! {}", another_function(10))
    }
    
    // define after main
    fn another_function(i:i32) -> i32 { // snake case style
        println!("Another function.i={i}, i={}", i); // print variable
        i + 1   // expression as return value
    }
    

    7、function可以使用return在函数中间返回,也可以直接在函数结束时通过expression返回。

    methed

    1、使用fn关键字声明。
    2、第一个参数必须是self。
    3、可以有和属性名一致的方法名。
    4、一个结构体可以有多个impl代码块。

    Associated Functions

    1、所有定义在impl代码块里面的都叫关联函数。一个结构体可以有多个impl代码块。
    2、关联函数的参数也可以没有self,此时我们就需要用::去调用这个方法。

    fn main() {
        let animal = Animal::new(2, "Lion");
        animal.say_hello();
    }
    
    struct Animal {
        age:u32,
        name:&'static str,
    }
    
    impl Animal {
        // associated function
        fn new(age:u32, name:&'static str) -> Self {
            Animal { age, name }    // expression as return value
        }
    
        // method
        fn say_hello(&self) {
            println!("Hello, my name is {} and I am {} years old.", self.name, self.age);
        }
    }
    

    参考资料

    Functions
    Method Syntax

  • 相关阅读:
    独立站:最新选品建议
    go设计模式之工厂方法模式
    MindsDB为许多不支持内置机器学习的数据库带来了机器学习功能
    【DaVinci Developer工具实战】02 - 软件设计编辑器
    Qt优秀开源项目之十三:QScintilla
    java:枚举类
    【编码译码】基于matlab QC-LDPC码编码和译码【含Matlab译码 2194期】
    STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
    Python之并发编程(协程)
    shiro授权
  • 原文地址:https://blog.csdn.net/C2681595858/article/details/139902789