我正在学习Rust并实现了一个玩具解析器,在开始的时候我定义了我的AST像
struct ASTIdentifier {
name: String,
}
字符串
这种设计的问题是我需要为每个标识符分配堆空间,并且每个标识符的名称应该来自源代码,这意味着它不需要额外的内存空间。所以我把我的struct改成了& str。
struct ASTIdentifier <'source_code_lifetime> {
name: &'source_code_lifetime str,
}
型
这个结构体确实提高了解析器的性能,因为它不需要为标识符分配内存空间。但是有一个新的问题,我如何转换标识符名称?因为现在它使用的是对str的引用。
1条答案
按热度按时间7uzetpgm1#
你描述的正是
Cow
存在的理由。字符串
初始存储
&str
:型
你可以使用
to_mut
来转换为Cow::Owned
(如果它还不是),并返回一个对字符串的可变引用:型