码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Rust】function和methed的区别


    文章目录

    • function
    • methed
      • Associated Functions
    • 参考资料

    一句话总结:
    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

  • 相关阅读:
    Pridwen: Universally Hardening SGX Programs via Load-Time Synthesis【ATC`22】
    Python中的Tkinter(Python的GUI编程)
    HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)
    BUUCTF·[网鼎杯 2020 青龙组]boom·WP
    服务器正文22:linux内核网络模块笔记:收包、发包、各种内核参数上限、网络内核优化和容器网络虚拟化(8/2)
    strict模式表
    Netty(一)NIO-基础
    sqlite基本操作
    Kafka3.0.0版本——消费者(分区的分配以及再平衡)
    大数据docker部署
  • 原文地址:https://blog.csdn.net/C2681595858/article/details/139902789
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号