小编Ube*_*per的帖子

如何将`&T`转换为'T`?

我想写一个函数,它接受一个包含任何类型的数组,并返回数组的最后一个元素,所以我试过:

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

generics rust

6
推荐指数
1
解决办法
244
查看次数

将字符串数组传递给函数而无需指定 N(编译时常量)

以下代码运行:

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可能比尝试编写一个执行相同操作的函数更令人头疼,但是就理解函数如何接受其中包含字符串的数组而言,为什么第二个示例无法编译?

arrays rust

2
推荐指数
1
解决办法
1956
查看次数

为什么嵌套元组评估为单个元组,但嵌套列表不评估为单个列表

在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)

有关元组的特殊之处在于它们给出了与列表相对的行为吗?

python list

0
推荐指数
1
解决办法
57
查看次数

标签 统计

rust ×2

arrays ×1

generics ×1

list ×1

python ×1