rust 函数需要在一个输入参数中接受多个类型

yyyllmsg  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(122)

我在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()要做更多的工作,这违背了整个目的。
谢谢你的帮助!请告诉我是否需要澄清。

jobtbby3

jobtbby31#

String转换为&str就像添加一个ampresand:&string一样简单。我不认为这是一个改变的理由。
但是,如果你担心不必要地克隆字符串的性能,你可以使用impl Into<String>(同时接受String&str)并通过.into()将其转换为String

pub fn element(count: i32, name: impl Into<String>) -> Element {
    Element { count, name: name.into() }
}

字符串

相关问题