⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

幻象类型(Phantom Type)与状态机:在编译期杜绝非法操作

利用泛型约束和未被使用的类型参数,将状态编码进类型系统,使得非法状态转换在编译期就被捕获。实现铁路售票、网络连接等状态机。 · 难度:入门 · +10XP

幻象类型(Phantom Type)与状态机:在编译期杜绝非法操作

幻象类型是泛型参数不直接用于存储,而是用于标记状态的类型。通过定义多个标记类型(如LoggedIn、Guest),你可以让某些方法只在特定状态下可用。本教程将展示如何创建优雅的零运行时开销状态机,强制所有状态转换合法。还会涉及associatedtype和where子句的高级用法。

enum Guest {}
enum LoggedIn {}

struct User<State> { let id: String init(id: String) { self.id = id } // 泛型默认为Guest }

extension User where State == LoggedIn { func logout() -> User<Guest> { User<Guest>(id: self.id) } func canPurchase() -> Bool { true } }

extension User where State == Guest { func login() -> User<LoggedIn> { User<LoggedIn>(id: self.id) } }

let guest = User(id: "1") // Guest状态 // guest.canPurchase() // 编译报错! let logged = guest.login() print(logged.canPurchase())

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 177 篇
0 完成
🔥 0