Rust 对os::args中的字符串从_str调用时类型不匹配

Rust 对os::args中的字符串从_str调用时类型不匹配,rust,Rust,我正在完成的锈教程,我目前在Collatz的问题。当我试图编译这段代码时,我得到一个错误: main.rs:9:26: 9:39 error: mismatched types: expected `&str`, found `collections::string::String` (expected &-ptr, found struct collections::string::String)

我正在完成的锈教程,我目前在Collatz的问题。当我试图编译这段代码时,我得到一个错误:

main.rs:9:26: 9:39 error: mismatched types: expected `&str`, found `collections::string::String` (expected &-ptr, found struct collections::string::String)                                                                                            

main.rs:9 let i = from_str::<int>(os::args()[1]).unwrap();                                                                                     
该教程指出:

2014年春季

这在锈迹斑斑的土地上是个坏消息。直到最近,这种语言还在经历许多结构上的变化。但是,自1.0.0 betas发布以来,该语言已经非常稳定

下面是一个固定的例子:

use std::env; // env, not os

fn main() {
    // args is an iterator now
    let args: Vec<_> = env::args().collect(); 

    if args.len() < 2 {
        println!("Error: Please provide a number as argument.");
        return;
    }

    // int doesn't exist anymore, from_str is better as `parse`
    let i: i32 = args[1].parse().unwrap();
    // No more `d` specifier
    println!("{} has {} Collatz steps", i, collatz(i)); 
}

// variables should be snake_case
fn collatz(n: i32) -> i32 {
    if n == 1 { return 0; }
    match n % 2 {
        0 => { 1 + collatz(n/2) }
        _ => { 1 + collatz(n*3+1) }
    }
}
使用std::env;//环境,而不是操作系统
fn main(){
//args现在是迭代器
让args:Vec=env::args().collect();
如果args.len()小于2{
println!(“错误:请提供一个数字作为参数。”);
返回;
}
//int不再存在,from_str作为'parse'更好`
设i:i32=args[1].parse().unwrap();
//没有更多的'd'说明符
println!(“{}有{}个Collatz步”,i,Collatz(i));
}
//变量应为snake\u情况
fn collatz(n:i32)->i32{
如果n==1{返回0;}
匹配%2{
0=>{1+collatz(n/2)}
_=>{1+collatz(n*3+1)}
}
}
我建议你选一个

  • 不再使用那个教程了
  • 联系作者,并要求他们标注其使用的Rust版本
  • 修复示例并将其提交回
  • use std::env; // env, not os
    
    fn main() {
        // args is an iterator now
        let args: Vec<_> = env::args().collect(); 
    
        if args.len() < 2 {
            println!("Error: Please provide a number as argument.");
            return;
        }
    
        // int doesn't exist anymore, from_str is better as `parse`
        let i: i32 = args[1].parse().unwrap();
        // No more `d` specifier
        println!("{} has {} Collatz steps", i, collatz(i)); 
    }
    
    // variables should be snake_case
    fn collatz(n: i32) -> i32 {
        if n == 1 { return 0; }
        match n % 2 {
            0 => { 1 + collatz(n/2) }
            _ => { 1 + collatz(n*3+1) }
        }
    }