钦遭聘 发表于 2025-6-5 15:20:49

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

rust中看不到java等一些OOP语言的中用于修饰方法的static之类的关键字眼。
注:rust有static关键字,目前是用于修饰生命周期的或者是变量的
例如:
let leaked_str: &'static str = Box::leak(tmp.into_boxed_str());static mut SIGN: u32 = 0; 先给出完全限定语法:::function(receiver_if_method, next_arg, ...); 为什么需要这个语法,直接原因是:特质和实现特定特质的类型中都存在同样的方法,必须通过完全限定的方式告诉Rust执行哪个方法。 一、例子

本例对于书上的例子稍微进行了改造.
trait Fight{
    fn fight(&self);
    fn rest();
}

struct Student{
    name:String
}
implStudent{
    /**
   * fight是关联函数,因为它带有self参数,所以不能直接调用特质中的同名方法,
   * 必须通过实例调用
   */
    fn fight(&self){
      println!("{} 在独斗.十步杀一人,千里不留行", self.name);
    }
    /**
   * rest是静态方法,不是关联方法,可以直接通过类型调用
   * 所以不能通过实例调用,只能通过类型调用
   */
    fnrest(){
      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设计到一半的时候,不想重构了,于是顺水推舟...
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

琉艺戕 发表于 2025-10-20 14:35:45

谢谢楼主提供!

焦尔蕾 发表于 2025-11-5 04:13:43

东西不错很实用谢谢分享

箝德孜 发表于 2025-11-27 04:43:42

很好很强大我过来先占个楼 待编辑

王妍芳 发表于 2025-12-21 07:26:58

热心回复!

科元料 发表于 2026-1-3 12:40:20

喜欢鼓捣这些软件,现在用得少,谢谢分享!

些耨努 发表于 2026-1-16 20:09:21

这个有用。

庞环 发表于 2026-1-18 17:30:49

收藏一下   不知道什么时候能用到

暴灵珊 发表于 2026-1-20 03:40:05

很好很强大我过来先占个楼 待编辑

酒跚骼 发表于 2026-1-20 10:03:48

这个好,看起来很实用

官厌 发表于 2026-1-22 14:00:23

懂技术并乐意极积无私分享的人越来越少。珍惜

缢闸 发表于 2026-1-25 10:59:46

yyds。多谢分享

夔新梅 发表于 2026-1-25 12:22:22

新版吗?好像是停更了吧。

樊涵菡 发表于 2026-1-26 07:18:57

这个有用。

狭踝仇 发表于 2026-1-27 07:19:36

感谢发布原创作品,程序园因你更精彩

单于易槐 发表于 2026-1-28 06:12:03

感谢分享,下载保存了,貌似很强大

损注 发表于 2026-1-28 06:29:47

分享、互助 让互联网精神温暖你我

揉幽递 发表于 2026-2-8 03:55:24

不错,里面软件多更新就更好了

忙贬 发表于 2026-2-8 13:49:57

收藏一下   不知道什么时候能用到

羔迪 发表于 2026-2-8 19:43:06

新版吗?好像是停更了吧。
页: [1] 2
查看完整版本: rust学习二十.7、RUST完全限定名以及静态方法