假期,我尝试使用rust
做一款命令行工具,来磨砺自己的rust
技术熟练度。起初,面对各式各样的字符串格式化功能点,我傻乎乎地尝试自己造轮子。但,实在是遇到了太多技术难点(可难死我了)。后来,通过在论坛发贴请教,我才了解到【标准库 - format!
语法扩展】已经90%
地满足了我的需求。至于,剩余10%
的功能,可通过实现不同的format trait
来深度定制-达成。
于是,我修改了假期目标为:
重新复习
format!
宏相关知识点。相比于之前(真是学过N
遍了),我要提高对这块知识点的重视程度。在复习过程,做些归纳总结和条理清晰的笔记。基于【标准库 -
format!
语法扩展】与【实现format trait
深度定制】的手段,来做一款rust
命令行工具。而不是,自己重新造轮子。
下面即是我对第一个目标的达成成果(除了丰富的教条总结归纳,还有30
个例程) --- 掌握rust
,先做“教条侠”。第二个目标还在进行中...
依赖关系宏观架构图
宏调用格式
format!("以{parameter}为占位符的·格式化字符串·字面量", arguments...)
{parameter}
名曰Formatting Argument
argument
名曰Value Argument
Formatting Argument
格式
下文中的
[...]
结构表示
一对
[
与]
之间的内容是可有可无的。而且
[...]
结构是可多层嵌套的。
{[argument][:format-spec]}
argument
:【引用指令】表示如何找到Value Argument
format-spec
:【格式化指令】表示如何格式化Value Argument
为字符串。
Formatting argument -> argument
以如下三种形式引用Value Argument
{}
名曰:Next (Value) Argument
【顺序访问】不会受【随机访问】·跳跃式寻找
Value Arguments
的影响,因为前者维护了独立的【游标变量】来跟踪迭代位置。[例程1]顺序访问
(Value) Argument
,逐一遍历arguments
列表中的每一项。但是,当format-spec
内包含.*
时,则会一次迭代遍历两项(下文有详细描述)。Value Argument:无要求
{positional parameter}
名曰:【索引】(Value) Argument
positional parameter
是integer
值。以始于
0
的索引值,随机访问(Value) Argument
。Value Argument:无要求
{naming parameter}
名曰:【具名】(Value) Argument
[例程2]要么,出现于
Value Arguments
列表的末端;格式:<parameter name>=<value>
。要么,不出现在
Value Arguments
列表中。相反,编译器会在当前作用域内,
寻找同名绑定变量,
使用该绑定变量的值。(馁馁地逆天了)
naming parameter
是identifier
字符串。经由【参数名】,随机访问
(Value) Argument
。Value Argument: