Rust 如何传递向量并返回字符串向量?

Rust 如何传递向量并返回字符串向量?,rust,Rust,我想弄清楚我需要做什么来传递一个向量并返回一个字符串向量,以便解决上的字谜练习 以下是我试图通过的测试: fn test_no_matches() { let inputs = ["hello", "world", "zombies", "pants"]; let outputs: Vec<&str> = vec![]; assert_eq!(anagrams_for("diaper", &inputs), outputs); } 我读过关于

我想弄清楚我需要做什么来传递一个向量并返回一个字符串向量,以便解决上的字谜练习

以下是我试图通过的测试:

fn test_no_matches() {
    let inputs = ["hello", "world", "zombies", "pants"];
    let outputs: Vec<&str> = vec![];
    assert_eq!(anagrams_for("diaper", &inputs), outputs);
}
我读过关于参考资料、借阅和生活的书。老实说,我对传递参考资料感到有点困惑。我认为返回向量仅仅是一个
Vec
,但我认为有一个问题是关于输入向量引用一个str导致了问题


如果有人能把我推向一个更好的方向,我将不胜感激,因为我不想破坏测试。

让我们看看编译器错误:

错误[E0308]:类型不匹配
-->src/lib.rs:4:39
|
4 |断言| eq!(用于(“尿布”输入和输出的字谜);
|                                       ^^^^^^^
|                                       |
|应为结构'std::vec::vec',找到的为`&[&str;4]`
|帮助:尝试使用转换方法:`(&inputs).to_vec()`
|
=注意:应为结构`std::vec::vec`
找到引用“&[&str;4]`
查看编译器如何指向错误发生的位置?错误消息指出您应该传递一个
Vec
(字符串片段的向量),但实际上您传递的是一个
&[&str;4]
(对包含字符串片段的长度为4的数组的引用)。这两种类型不一样

要使代码正常工作,可以将数组转换为向量:

anagrams_for("diaper", inputs.to_vec());
或者,您可以构建一个向量来开始:

let inputs = vec!["hello", "world", "zombies", "pants"];
anagrams_for("diaper", inputs);
但这两个都是愚蠢的,因为你在分配一个向量,而从来没有使用它给你的任何力量。相反,您实际上只想接受字符串片段的片段:

fn anagrams_for<'a>(word: &str, inp: &[&'a str]) -> Vec<&'a str>

只需将函数签名从

pub fn anagrams_for<'a>(word: &str, inp: Vec<&'a str>) -> Vec<&'a str>

pub fn anagrams_for)->Vec(word:&str,inp:&[&a str])->Vec你所做的是Kirk测试,我做不到。我把第一部分放在这里是为了说明我的函数是如何被调用的。我必须使我的公共函数符合测试中的调用。@macshaggy也许我的答案组织得不好,但最后一个答案(真实答案)只是对您的实现代码的更改,不涉及对测试的任何更改。事实就是这样。我一直在阅读文档,但无法确定签名是&[&'a str],以便正确获取向量。谢谢,我学到了一些关于访问ptr的知识。非常感谢!!这是我的。
pub fn anagrams_for<'a>(word: &str, inp: Vec<&'a str>) -> Vec<&'a str>
pub fn anagrams_for<'a>(word: &str, inp: &[&'a str]) -> Vec<&'a str>