Marginalman 板


LINE

: https://space.bilibili.com/361469957/lists/3902595 : 从入门到入门 1. struct 的 impl function 就是其他语言的 class member function 类似许多语言 作为 member 要有 self 才能被实现 如 fn do(&self, ..) 没有 self 的只能用命名空间使用 如 SomeThing::do_something(); 参数种类有 (&self)、(&mut self)、(self) 第一个是不可变引用 第二个是可变引用 第三个是会让 function 取得 struct 所有权 i.e. 可以利用第三个特性做 Building Pattern struct ConfigBuilder { foo: String } impl ConfigBuilder { fn set_foo(mut self, f: String) -> Self { self.foo = f; self } fn build(self) -> Config { Config { foo: self.foo } } } 呼叫时像这样: let config = ConfigBuilder .set_foo("value".into()) .build(); 这样一整串方法都是以 self 传递所有权的方式来实作 2. 关联函数 不用上面几种 self 当第一个参数 就只能称为关联函数 (associated function) 不能说是 member function 类似C++的静态函数 (无this指标) 也可以这样写 fn square(size: u32) -> Self { Self { width: size, height: size, } } 这样会让Self对照变成struct的Rectangle来输出一个长宽大小为size的自己 大部分的 fn new() 都是这种如 String::new() 3. 调用函数 调用函数其实也是语法糖: rect1.can_hold(&rect2) // 等同 Rectangle::can_hold(&rect1, &rect2)); 所以调用 member function 不会失去所有权 4. #[derive(Copy, Clone)] 定义了 #[derive(Copy, Clone)] 的情况 输入不再是 self 而是 *self 函数不会尝试获得所有权而是复制一份 参考以下: #[derive(Copy, Clone)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn max(self, other: Self) -> Self { let width = self.width.max(other.width); let height = self.height.max(other.height); Self { width, height } } } fn main() { let r1 = Rectangle { width: 10, height: 20 }; let r2 = Rectangle { width: 30, height: 15 }; let r3 = r1.max(r2); // OK:r1 和 r2 都是 Copy,不会 move println!("r1 = {}x{}", r1.width, r1.height); // 可以继续用 r1 println!("r2 = {}x{}", r2.width, r2.height); // 可以继续用 r2 } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.143.163 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Marginalman/M.1745826038.A.002.html
1F:→ crimsonmoon9: 大师 04/28 15:42
2F:→ crimsonmoon9: 我没正式学过rust觉得好难 04/28 15:42
3F:→ yam276: 看我给的up主的影片 他讲的很清楚 04/28 15:42
4F:→ yam276: 这串都是看他影片的笔记 04/28 15:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP