Rust 1.7.0 處理命令行參數

std是 Rust 標準函數庫;
env 模塊提供了處理環境函數。
在使用標準函數庫的時候,使用 use 導入對應的 module 。javascript

1、直接輸出

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

2、存儲並輸出

改動: java

$vi src/main.rs

代碼:ruby

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中。markdown

$cargo run  12 and 78
Running `target/debug/attribute_test 12 and 78`
*** args = target/debug/attribute_test
*** args = 12
*** args = and
*** args = 78

3、計算

改動:函數

$vi src/main.rs

代碼:post

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);
}

執行測試:ui

$cargo test
Running target/debug/attribute_test-431700a6ad4b39fd

running 1 test
test test_add ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured

執行:spa

$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位整型值。命令行

相關文章
相關標籤/搜索