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

打印 上一主题 下一主题

主题 1730|帖子 1730|积分 5200

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执行哪个方法。 一、例子

本例对于书上的例子轻微举行了改造.
  1. trait Fight{
  2.     fn fight(&self);
  3.     fn rest();
  4. }
  5. struct Student{
  6.     name:String
  7. }
  8. impl  Student{
  9.     /**
  10.      * fight是关联函数,因为它带有self参数,所以不能直接调用特质中的同名方法,
  11.      * 必须通过实例调用
  12.      */
  13.     fn fight(&self){
  14.         println!("{} 在独斗.十步杀一人,千里不留行", self.name);
  15.     }
  16.     /**
  17.      * rest是静态方法,不是关联方法,可以直接通过类型调用
  18.      * 所以不能通过实例调用,只能通过类型调用
  19.      */
  20.     fn  rest(){
  21.         println!("休息一下");
  22.     }
  23. }
  24. impl Fight for Student{
  25.     fn fight(&self){
  26.         println!("{} 在团战.", self.name);
  27.     }
  28.     fn rest(){
  29.         println!("大家休息一下");
  30.     }
  31. }
  32. fn main() {
  33.     let stu = Student{name:"小明".to_string()};
  34.     // 三种调用方式,调取不同的方法
  35.     // 1.实例后跟上方法
  36.     // 2.特质名::方法(&实例)
  37.     // 3.<Type as Trait>::function(receiver_if_method, next_arg, ...);
  38.     stu.fight();//1.实例跟上方法
  39.     Fight::fight(&stu);   //2.特质名::方法(&实例) -- 实际是调用特质的方法
  40.     <Student as Fight>::fight(&stu);  //3.特质名::方法(&实例) -- 实际是调用对象实例的方法
  41.     Student::rest();  //4.类型的静态方法
  42.     <Student as Fight>::rest();
  43. }
复制代码
在本例中有一个范例Student和一个特质Fight.
Student和Fight都有方法fight和rest,其中rest是无参数。Student.reset本质上就是一个范例Student的静态方法,即使不实例化也可以调用。
看运行效果:

 
二、小结

1.rust的范例可以有静态方法,不必要实例化即可执行,但是rust并没有利用类似static之类的修饰符显着指出
2.rust可以通过方法的完全限定语法来确定要执行范例所实现的特质方法--假如这个名称的方法范例自己也有一个
3.在诸如java如许的语言中,是不允许rust如许的-对象的方法名和接口的方法名称一样
4.rust这种措施,允许重名出现,但如许反而会导致代码难于阅读。不清楚为什么它要容许这个,是不是因为rust计划到一半的时候,不想重构了,于是因利乘便...
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表