如何在Rust中访问命令行参数?

196

Rust教程没有解释如何从命令行获取参数。在所有示例中,fn main()都只显示为空参数列表。

main访问命令行参数的正确方法是什么?

13个回答

2

在字符串方面,barjak提到的方法是有效的,但如果你需要将参数作为数字(在本例中是uint)使用,你需要进行以下转换:

fn main() {
    let arg : ~[~str] = os::args();
    match uint::from_str(arg[1]){
         Some(x)=>io::println(fmt!("%u",someFunction(x))),
         None=>io::println("I need a real number")
    }
}

1
自2013年5月Calvin's answer以来,Rust已经发展了许多。现在,人们会使用as_slice()来解析命令行参数:
use std::os;

fn seen_arg(x: uint)
{       
    println!("you passed me {}", x);
}
fn main() {
    let args = os::args();
    let args = args.as_slice();
    let nitems = {
            if args.len() == 2 {
                    from_str::<uint>(args[1].as_slice()).unwrap()
            } else {
                    10000
            }
    };

    seen_arg(nitems);
}

仅供记录:as_slice()已经不存在了,应该使用&args - Slava Semushin

1
自较新版本的 Rust(Rust > 0.10/11)起,数组语法将不再适用。您需要使用 get 方法。
在夜间版中,数组语法又可用了。因此,您可以选择 getter 或数组索引。
use std::os;

fn main() {
  let args = os::args();
  println!("{}", args.get(1));
}

// Compile
rustc args.rs && ./args hello-world // returns hello-world

这是过时的语句。最新的 Rust nightlies 支持在 Vec 上使用索引语法。我想已经有一个月左右了。请参见此示例 - Vladimir Matveev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接