「这是我参与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)] |
本文转载自: 掘金