You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
// enums3.rs
// 解决所有的 TODO ,通过测试!
// I AM NOT DONE
enum Message {
// TODO: 根据以下的使用方式, 实现 Message 的不同类型
}
struct Point {
x : u8 ,
y : u8 ,
}
struct State {
color : ( u8 , u8 , u8 ) ,
position : Point ,
quit : bool ,
}
impl State {
fn change_color ( & mut self , color : ( u8 , u8 , u8 ) ) {
self . color = color ;
}
fn quit ( & mut self ) {
self . quit = true ;
}
fn echo ( & self , s : String ) {
println! ( "{}" , s ) ;
}
fn move_position ( & mut self , p : Point ) {
self . position = p ;
}
fn process ( & mut self , message : Message ) {
// TODO: 使用 match 表达式来处理不同类型的消息
}
}
#[ cfg(test) ]
mod tests {
use super ::* ;
#[ test ]
fn test_match_message_call ( ) {
let mut state = State {
quit : false ,
position : Point { x : 0 , y : 0 } ,
color : ( 0 , 0 , 0 ) ,
} ;
state . process ( Message ::ChangeColor ( ( 255 , 0 , 255 ) ) ) ;
state . process ( Message ::Echo ( String ::from ( "hello world" ) ) ) ;
state . process ( Message ::Move ( Point { x : 10 , y : 15 } ) ) ;
state . process ( Message ::Quit ) ;
assert_eq! ( state . color , ( 255 , 0 , 255 ) ) ;
assert_eq! ( state . position . x , 10 ) ;
assert_eq! ( state . position . y , 15 ) ;
assert_eq! ( state . quit , true ) ;
}
}