前言
許久不寫部落格了,臨近畢業,各種事情都告一段落。無意間看到安利Rust的文章,心裡就種草了,閒來無事,從網上找到《Rust programming book》的中文版,陸陸續續看到400頁,覺得可以開始寫程式碼了。
正好最近又想把Leetcode上的題刷完,而leetcode又已經支援Rust了,就開始決定用Rust刷Leetcode,刷題的同時,順便就熟悉新語言了。
寫部落格的時候,突然發現Csdn亂七八糟的東西多了好多,於是就是轉到掘金來了。
廢話不多說,下面開始進入正題
環境配置
Rust安裝
個人目前使用的是windows環境,這裡主要介紹windows下環境的配置 首先,下一個rustup,執行rustup安裝rust和其配套的包管理工具。具體細節不多說,網上有很多教程,其中關鍵點是,因為rustup預設的下載源在國外,所以下載速度會很慢,所以在下載之前,先加兩個系統變數,配置一箇中科大的源:
RUSTUP_DIST_SERVER:
https://mirrors.ustc.edu.cn/rust-static
RUSTUP_UPDATE_ROOT:
https://mirrors.ustc.edu.cn/rust-static/rustup
複製程式碼
IDE配置
安裝好之後,我們需要一個IDE,這裡我選擇 IDEA + Rust外掛
裝好之後,新建一個Rust bin專案
建好專案之後,接下來就可以開始寫程式了
配置單元測試環境
Rust提供了非常方便的單元測試和整合測試功能,我們想要在寫完每道題的演算法之後,執行一套測試用例,看看程式是否寫對了。
首先在src目錄下有個main.rs
,我們在src目錄下再新建一個rust檔案,作為存放每道題的解法和單測的地方。像這樣:
我這裡新建了一個n754_reach_a_number.rs
的檔案 (即編號為754,標題名為reach a number的題目),因為Leetcode的程式碼是以函式的方式提交的,裡面的程式碼是這樣:
use std::f64;
pub struct Solution{}
impl Solution{
pub fn reach_number(target:i32)->i32{
let target=target.abs();
let mut n=f64::sqrt(2.0*target as f64) as i32;
let mut sum=n*(n+1)/2;
while sum<target{
n+=1;
sum+=n;
}
while (sum-target)%2==1{
n+=1;
sum+=n;
}
n
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_1() {
assert_eq!(Solution::reach_number(1),1);
assert_eq!(Solution::reach_number(2),3);
assert_eq!(Solution::reach_number(3),2);
assert_eq!(Solution::reach_number(7),5);
assert_eq!(Solution::reach_number(8),4);
assert_eq!(Solution::reach_number(12),7);
}
#[test]
fn test_2(){
assert_eq!(Solution::reach_number(-1),1);
assert_eq!(Solution::reach_number(-2),3);
assert_eq!(Solution::reach_number(-3),2);
assert_eq!(Solution::reach_number(-7),5);
assert_eq!(Solution::reach_number(-8),4);
assert_eq!(Solution::reach_number(-12),7);
}
}
複製程式碼
其中上面是題目的解法,下面是我們的單測
接下來在main.rs
引入我們的mod(Rust裡一個檔案即可以看作一個mod):
mod n754_reach_a_number;
fn main() {
}
複製程式碼
看上去我們的main
函式什麼也沒做,事實上我們也不需要它做什麼,我們只是要引入這個mod,然後執行mod裡的單測,這可以通過Edit Configuration
實現:
像上圖這樣,新建一個test,把command
改為test
,這樣在我們執行它的時候就會自動執行mod的單測了(因為#[cfg(test)]
只允許在test的時候執行,所以需要把命令改為test)
通過上述操作,接下來再寫其他題的時候,我們只需要把根據對應的題目建一個對應的 rs 檔案,再在main.rs
把不相關的mod刪掉,只引入想要執行的題目的單測就好了