如何从函数返回固定大小的字符串文字数组?

cam*_*car 2 arrays string rust

此函数适用于 type i32,但适用于 type str

fn getValues() -> [str; 2] {
    [
        "37107287533902102798797998220837590246510135740250",
        "46376937677490009712648124896970078050417018260538",
    ]
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

fn getValues() -> [str; 2] {
    [
        "37107287533902102798797998220837590246510135740250",
        "46376937677490009712648124896970078050417018260538",
    ]
}
Run Code Online (Sandbox Code Playgroud)

这个错误让我觉得我需要添加大小,但我做到了:大小为 2。 Rust 想要什么?

gim*_*mpf 7

strstr 原始类型,它是一种无大小的类型,有一些限制——您遇到了其中之一。

为了解决您的问题,str您需要返回&str一个借用的字符串切片,而不是返回一个普通的。在这种特定情况下,您甚至可以使用&'static str,因为字符串文字始终具有static生命周期。

此外,由于原始数组也是 DST(动态大小类型,另一种调整大小类型的方法),因此您需要指定元素的数量(您做对了)。

因此,完整的声明将是fn getValues()-> [&'static str; 100].

如果您在编译时不知道数组的大小,您可能想使用 a Vec,如果您有一些非文字字符串,您可能想使用 a String。那看起来像

fn getValues() -> Vec<String> { vec!["shoten".into()] }
Run Code Online (Sandbox Code Playgroud)

PS:不要回避那些堆分配的、拥有的类型——它们确实使编程更容易。与引用和生命周期抗争是一种很好的风格,但您不需要预先完成所有这些工作,而是稍后进行优化和重构。