网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Rust >

rust学习二十.7、RUST完全限定名以及静态方法

时间:2025-03-31 16:55

人气:

作者:admin

标签:

导读:rust中看不到java等一些OOP语言的中用于修饰方法的static之类的关键字眼。 注:rust有static关键字,目前是用于修饰生命周期的或者是变量的 例如: let leaked_str: amp;#39;static str = Box::leak(tm...

rust中看不到java等一些OOP语言的中用于修饰方法的static之类的关键字眼。

注:rust有static关键字,目前是用于修饰生命周期的或者是变量的

例如:

let leaked_str: &'static str = Box::leak(tmp.into_boxed_str()); static mut SIGN: u32 = 0;   先给出完全限定语法: <Type as Trait>::function(receiver_if_method, next_arg, ...);   为什么需要这个语法,直接原因是:特质和实现特定特质的类型中都存在同样的方法,必须通过完全限定的方式告诉Rust执行哪个方法。  

一、例子

本例对于书上的例子稍微进行了改造.

trait Fight{
    fn fight(&self);
    fn rest();
}

struct Student{
    name:String
}
impl  Student{
    /**
     * fight是关联函数,因为它带有self参数,所以不能直接调用特质中的同名方法,
     * 必须通过实例调用
     */
    fn fight(&self){
        println!("{} 在独斗.十步杀一人,千里不留行", self.name);
    }
    /**
     * rest是静态方法,不是关联方法,可以直接通过类型调用
     * 所以不能通过实例调用,只能通过类型调用
     */
    fn  rest(){
        println!("休息一下");
    }
}
impl Fight for Student{
    fn fight(&self){
        println!("{} 在团战.", self.name);
    }
    fn rest(){
        println!("大家休息一下");
    }
}

fn main() {
    let stu = Student{name:"小明".to_string()};
    // 三种调用方式,调取不同的方法
    // 1.实例后跟上方法
    // 2.特质名::方法(&实例)
    // 3.<Type as Trait>::function(receiver_if_method, next_arg, ...);

    stu.fight();//1.实例跟上方法
    Fight::fight(&stu);   //2.特质名::方法(&实例) -- 实际是调用特质的方法
    <Student as Fight>::fight(&stu);  //3.特质名::方法(&实例) -- 实际是调用对象实例的方法

    Student::rest();  //4.类型的静态方法
    <Student as Fight>::rest();
}

在本例中有一个类型Student和一个特质Fight.

Student和Fight都有方法fight和rest,其中rest是无参数。Student.reset本质上就是一个类型Student的静态方法,即使不实例化也可以调用。

看运行结果:

 

二、小结

1.rust的类型可以有静态方法,不需要实例化即可执行,但是rust并没有使用类似static之类的修饰符明显指出

2.rust可以通过方法的完全限定语法来确定要执行类型所实现的特质方法--如果这个名称的方法类型自己也有一个

3.在诸如java这样的语言中,是不允许rust这样的-对象的方法名和接口的方法名称一样

4.rust这种措施,允许重名出现,但这样反而会导致代码难于阅读。不清楚为什么它要容许这个,是不是因为rust设计到一半的时候,不想重构了,于是顺水推舟...

 

本文来自博客园,作者:正在战斗中,转载请注明原文链接:https://www.cnblogs.com/lzfhope/p/18802457

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信