1 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
關鍵點是:
將洗牌所需的特征納入范圍(SliceRandom對于 rand 版本 0.7)。
將所需類型納入范圍enum::iter()
貨物.toml:
[package]
name = "mcve"
version = "0.1.0"
authors = ["Svetlin Zarev <svetlin.zarev@xxx.com>"]
edition = "2018"
[dependencies]
strum = "0.15"
strum_macros = "0.15"
rand = "0.7.0"
main.rs:
use strum_macros::EnumIter; // etc.
use strum::IntoEnumIterator;
use rand::thread_rng;
use rand::seq::SliceRandom;
#[derive(Debug, Copy, Clone,EnumIter)]
enum Suit {
DIAMONDS,
HEARTS,
CLUBS,
SPADES,
}
#[derive(Debug, Copy, Clone, EnumIter)]
enum Rank {
Ace,
King,
Queen,
Jack,
}
#[derive(Debug)]
struct Card {
suit: Suit,
rank: Rank,
}
impl Card {
fn new(suit: Suit, rank: Rank) -> Card {
Card { suit, rank }
}
}
fn main() {
let mut cards = Vec::<Card>::new();
for r in Rank::iter() {
for s in Suit::iter() {
cards.push(Card::new(s, r));
}
}
let mut rng = thread_rng();
cards.shuffle(&mut rng);
println!("{:?}", cards);
}
正如您所看到的,這幾乎就像在 Java 中一樣。唯一的區(qū)別是,有些方法不是來自結構體,而是來自接口(在 Rust 中,這些方法稱為特征),您必須導入它們才能使用它們。
添加回答
舉報