我希望能够编写这样的代码:
ExampleStruct {
field1: "value1",
field2: "value2",
nested: ExampleNestedStruct{
field3: "value3",
},
}
如下所示的结构:
第一个
但由于ExampleStruct必须具有String类型的字段而不是&str类型的字段,因此我必须使用.to_owned()或类似函数显式转换每个值,这是可行的,但不是最优的。
我考虑过创建一个具有&str字段的相同结构体和一个利用序列化的转换方法,但对于这样一个简单的问题来说,这似乎过于复杂了,而且在我的代码中有两个本质上相同的结构体。
有没有什么方法可以把所有出现的&str隐式地转换成String?或者有没有什么语法我可能不知道?我是个新手。
我试着查找创建字符串的可能语法,这些字符串似乎都包括某种显式函数调用。
我还发现了一些函数参数的自动转换语法(如果可以这么称呼的话),如下所示:fn fn名称〈T:转换为(s:T),但这是行不通的,因为我调用的不是带参数的函数。
编辑:我想我可以通过写一个宏来实现这一点。我会在有时间的时候尝试一下,除非有人已经创建了一个&str_to_String宏?
2条答案
按热度按时间ie3xauqp1#
你应该能够使用core::convert::Into trait。这是你可能会问的代码:
有关特征的更多详细信息:https://doc.rust-lang.org/beta/core/convert/trait.Into.html
gopyfrb32#
好的,我通过创建一个宏来解决这个问题。你可以在这里找到它https://crates.io/crates/append_to_string
可能看起来恐吓一些,但它并不是太复杂,一旦你熟悉了syn板条箱。
现在,宏允许我编写如下代码:
而不是这样: