Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配str或String的片段_String_Rust_Match - Fatal编程技术网

匹配str或String的片段

匹配str或String的片段,string,rust,match,String,Rust,Match,我有一个函数,可以接受&[&str]或&[String]并根据片返回不同的值。如果我添加一个PartialEq约束,那么使用==可以很好地工作: pub fn info1, { 如果路径==[“a”,“b”]{ 返回一些(“这是a-b!”。到_string() } 没有一个 } 但如果我使用匹配,则它不起作用: pub fn info2, { 匹配路径{ [“a”,“b”]=>一些(“这是b!”。to_string()), _=>没有, } } 错误[E0308]:类型不匹配 -->src/

我有一个函数,可以接受
&[&str]
&[String]
并根据片返回不同的值。如果我添加一个
PartialEq
约束,那么使用
==
可以很好地工作:

pub fn info1,
{
如果路径==[“a”,“b”]{
返回一些(“这是a-b!”。到_string()
}
没有一个
}
但如果我使用
匹配
,则它不起作用:

pub fn info2,
{
匹配路径{
[“a”,“b”]=>一些(“这是b!”。to_string()),
_=>没有,
}
}
错误[E0308]:类型不匹配
-->src/lib.rs:16:6
|

11 | pub fn info2您不能为此使用
match

你的第一个版本没有错。您可以使用以下工具使其更通用:

pub fn info1(路径:&[S])->选项
哪里
对于
{
如果路径==[“a”,“b”]{
一些(“这是a-b!”。to_string());
}否则{
没有一个
}
}
我得到了一个有用的答案。无法使用
match
,因为
match
中的模式只能由
struct
s、
enum
s、
slice
s和文本组成。我发现最好的描述是:

模式由以下内容的某些组合组成:

  • 文字
  • 非结构化数组、枚举、结构或元组
  • 变数
  • 通配符
  • 占位符
在本例中,像
“a”
这样的字符串文字是
&str
,因此这是唯一一种可以
匹配的字符串(您可以看到人们基本上有相同的问题,但没有切片)。在这种情况下,您可以不用分配就可以解决它,因为您不需要构造引用片段,您只需要一个

由于您肯定需要一片
&str
s,因此除了分配
Vec
之外,没有其他方法:


pub fn info1我们可能是“对立的”,但我至少知道“既然你肯定需要一部分&str,那么除了分配一个Vec之外,真的没有别的办法”是一个糟糕的解决方案。在99%的情况下,定位一个
Vec
是一个完美的解决方案。并非每一位代码都必须优化到n度。
error[E0308]: mismatched types
  --> src/lib.rs:16:6
   |
11 | pub fn info2<'a, S>(path: &[S]) -> Option<String>
   |                  - this type parameter
...
15 |   match path {
   |         ---- this expression has type `&[S]`
16 |     ["a", "b"] => Some("It's a b!".to_string()),
   |      ^^^ expected type parameter `S`, found `&str`
   |
   = note: expected type parameter `S`
                   found reference `&'static str`