std是 Rust 標準函數庫;
env 模塊提供了處理環境函數。
在使用標準函數庫的時候,使用 use 導入對應的 module 。javascript
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
改動: 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
改動:函數
$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位整型值。命令行