--- tags: substrate-course --- # Substrate 快速入门与实战 第六课 作业提示 ## 作业 - 重构 OwnedKitties 和 KittyLinkedItem - 支持泛型 - 单独的可重复使用的模块 ## 提示 - 作为一个可重用的模块,可以是一个单独的package,可以用 `cargo new package-name` 创建 - 但是这边简化下,一个单独的Rust module也是可以的。直接建立一个新的文件在src目录下就好,然后lib.rs文件里加上 `mod module_name;` 就可以引用了 - 优化的方向有两个,一个是这个LinkedItem目前只是针对于 `T::KittyIndex` 的,最好可以改成一个泛型,就可以支持不同的数据结构 - `struct LinkedItem<Item>` - 还有一个方向是现在的实现都是针对于 `OwnedKitties` 的,并不能重用。 - 这就需要有一个抽象支持不同的 `Storage` - 这个有几种方法,我这边提供个最通用的的方法的思路 - 创建新的 trait 来重新抽象可以重复的功能 - `trait LinkedItemStorage<Key, Value>` - `fn get(key: &Key> -> Option<Value>` - `fn insert(key: &Key, value: Value)` - `fn take(key: &Key) -> Option<Value>` - 然后提供这个 trait 的实现 - `impl<T: Trait> LinkedItemStorage<T::AccountId, T::KittyIndex> for OwnedKitties<T>` - 然后使用这个 `LinkedItemStorage` 来实现 `LinkedList` - `struct LinkedList<Storage>(rstd::marker::PhantomData<Storage>)` - `impl <Key, Value, Storage> for LinkedList where Storage: LinkedItemStorage<Key, Value>`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up