「这是我参与11月更文挑战的第 13 天,活动详情查看:2021最后一次更文挑战」
区分命令
回到项目中,正如我上面提到的,第一件事是能够区分 MetaCommand
和 SQLCommand
。可以看到在 main.rs
通过调用 get_command_type(command: &String)
来处理这个问题,它返回一个 rep::CommandType
类型的枚举,有 rep::CommanType::SQLCommand(String)
和 rep::CommanType::MetaCommand(String)
两种选项。这样我就可以很容易地区分这两种类型的输入,并对它们分别采取适当的行动:
1 | rust复制代码fn main() -> rustyline::Result<()> { |
Meta Commands
先看看 meta_command:
首先是枚举类型的定义,为了改善用户体验,我添加了一个 Unknown
选项,以匹配任何尚未定义的MetaCommands
。
之后,我们有一个实现 fmt::Display
trait的block,它帮助我们定义自定义类型如何被输出到终端上。例如,我们想在 println!
中使用它们。
然后在后面,你会看到另一个 impl block,里面有一个 fn new()
,作为我们的 MetaCommand
类型的构造函数。我这么说是因为Rust不是一种面向对象的语言,所以 fn new()
并不像Java等语言中的构造函数,事实上,你可以随心所欲地调用它而不是new。
1 | rust复制代码#[derive(Debug, PartialEq)] |
本文转载自: 掘金