std是 Rust 标准函数库;
env 模块提供了处理环境函数。 在使用标准函数库的时候,使用 use 导入对应的 module 。一、直接输出
use std::env;fn main(){ for argument in env::args() { println!("*** args = {}", argument); }}
$cargo run 12 and 78
Running `target/debug/attribute_test 12 and 78`*** args = target/debug/attribute_test*** args = 12*** args = and*** args = 78
二、存储并输出
改动:
$vi src/main.rs
代码:
use std::env;fn main(){ let mut arguments = Vec::new(); for argument in env::args() { arguments.push(argument); } for a in arguments{ println!("*** argument = {}", a); }}
Vec 是一个可增长的list数据类型,提供push 和pop 数据操作。
通过 arguments.push( ) 操作将命令行參数保存到 arguments中。$cargo run 12 and 78
Running `target/debug/attribute_test 12 and 78`*** args = target/debug/attribute_test*** args = 12*** args = and*** args = 78
三、计算
改动:
$vi src/main.rs
代码:
use std::env;use std::str::FromStr;fn main(){ let mut arguments = Vec::new(); for argument in env::args() { arguments.push(argument); } let first:i32 = i32::from_str(&arguments[1]).expect("error parsing argument"); let second:i32 = i32::from_str(&arguments[2]).expect("error parsing argument"); let result = add(first,second); println!("*** value = {}",result);}fn add(x:i32,y:i32)-> i32{ return x+y;}#[test]fn test_add(){ assert_eq!(add(3,4),7);}
执行測试:
$cargo test
Running target/debug/attribute_test-431700a6ad4b39fdrunning 1 testtest test_add ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
执行:
$cargo run 12 34
Running `target/debug/attribute_test 12 34`*** value = 46
解释一下:
* 从命令行获取的參数都是 string 类型。 * arguments中的第一个值是当前程序的名称。因此计算參数从arguments[1]和arguments[2]取; * 在參数相加之前。使用 from_str 将字符转换为32位整型; * 使用 use std::str::FromStr 引入 from_str 功能函数; * from_str 返回的值是一个 Result 值,代表转换是否成功。通过Result的 expect 功能函数能够在出现错误的时候提示;假设没有错误返回正确的32位整型值。