我在Rust公司工作,做一个程序,可以自动解出化学方程式(以及其他相关的东西)对我来说。长话短说,我问我的化学老师他是否会让我这样做,并在作业中使用它,他说是的,只要我自己写的。我已经看了一段时间的rust语言,我想这是一个学习的好时机。所以在我的项目中,我有一个结构体定义为:
pub struct Element<> {
pub count: i32,
pub name: String
}
字符串
和一个函数来构建一个元素,定义如下:
pub fn element(count: i32, name:String) -> Element<> {
let equ: Element = Element { count: count, name: name };
return equ
}
型
这一切都很好,但是当我开始做单元测试时,出现了一个挫折;字符串是这样创建的:
第一个月
are &str默认。这意味着我必须在每个手动定义的字符串之后输入.to_string()(我在单元测试中经常这样做)。作为一个程序员,自动化比手动处理需要更长时间的小麻烦是我的祸根(我相信你们都知道),所以我尝试重新定义函数如下:
pub fn element(count: i32, name: &str) -> Element<> {
let equ: Element = Element { count: count, name: name.to_string() };
return equ
}
型
别激动现在这个函数为我处理了字符串!多么快乐!..除了现在当某个东西已经是字符串时,我想把它添加到一个元素中,比如,我不知道,这个函数的每个非单元测试实现?,我必须把它变成一个& string。
看到避免这种事情是这个冒险的首要目的,我开始寻找修复它的方法,但我就是找不到任何东西。Traits看起来很有前途,但我不能以我想要的方式传入参数。我看到了一些关于定义多个函数的东西,但我似乎无法让它工作。定义一个枚举 * 会 * 工作,但这迫使我将输入字符串 Package 在枚举中,这比仅仅.to_string()要做更多的工作,这违背了整个目的。
谢谢你的帮助!请告诉我是否需要澄清。
1条答案
按热度按时间jobtbby31#
将
String
转换为&str
就像添加一个ampresand:&string
一样简单。我不认为这是一个改变的理由。但是,如果你担心不必要地克隆字符串的性能,你可以使用
impl Into<String>
(同时接受String
和&str
)并通过.into()
将其转换为String
:字符串