我想写一个函数,它接受一个包含任何类型的数组,并返回数组的最后一个元素,所以我试过:
fn main() {
let v = ["a", "b"];
println!("{}", last(&v));
}
fn last<T: Clone>(slice: &[T]) -> &T {
&slice[slice.len()-1]
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但当我应用一个小调整时:
fn main() {
let v = ["a", "b"];
println!("{}", last(&v));
}
fn last<T: Clone>(slice: &[T]) -> T {
&slice[slice.len()-1]
}
Run Code Online (Sandbox Code Playgroud)
然后我遇到了:
error[E0308]: mismatched types
--> <anon>:9:5
|
9 | &slice[n-1]
| ^^^^^^^^^^^ expected type parameter, found &T
|
= note: expected type `T`
found type `&T`
Run Code Online (Sandbox Code Playgroud)
如何将其转换&T
为刚好T
?
以下代码运行:
fn last_el(arr: [&str; 2]) -> usize {
arr.len() - 1
}
fn main() {
let names = ["this", "that"];
println!("{}", names[last_el(names)]);
}
Run Code Online (Sandbox Code Playgroud)
然而,它只这样做,[&str; 2]
并且 2 必须匹配names
. 例如,以下代码无法编译:
fn last_el(arr: [&str]) -> usize {
arr.len() - 1
}
fn main(){
let names = ["this","that"];
println!("{}", names[last_el(names)]);
}
Run Code Online (Sandbox Code Playgroud)
我将如何写这个以便我不必指定N
?
我知道这arr.len() - 1
可能比尝试编写一个执行相同操作的函数更令人头疼,但是就理解函数如何接受其中包含字符串的数组而言,为什么第二个示例无法编译?
在python如果我有:
((()))
Run Code Online (Sandbox Code Playgroud)
或者我有
()
Run Code Online (Sandbox Code Playgroud)
然后 ((())) == ()
和
if (()):
# is false
Run Code Online (Sandbox Code Playgroud)
而
if [[]]:
# is true
Run Code Online (Sandbox Code Playgroud)
有关元组的特殊之处在于它们给出了与列表相对的行为吗?