Rust emit
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 1/5
- Thời gian dự kiến
- Dưới một giờ
- Mức phù hợp với người mới
- 15/100
- Loại issue
- Tài liệu
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- rust
- Lĩnh vực
- documentation
Hướng nghiên cứu
Bắt đầu với ví dụ Rust Playground và phần triển khai EventEmitter bằng Rust được liên kết trong issue, sau đó đọc các phương thức EventEmitter::on và emit được hiển thị. Giải thích mối liên hệ giữa kiểu generic F, Box<dyn Fn(&U)> và lệnh gọi handler(&payload), sử dụng các ví dụ main để kiểm tra phần hoàn thành.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I wrote this based on this, but did not get how the pub fn on<F>(&mut self, event: T, handler: F) is working, and how it got fired by calling handler(&payload) in the emit can you explain little bit pls. thanks
use std::collections::HashMap;
use std::cmp::Eq;
use std::hash::Hash;
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
enum GreetEvent {
SayHello,
SayBye,
}
type HandlerPtr<T> = Box<dyn Fn(&T)>; // Vec<Arc<dyn EventListener>>; //
pub struct EventEmitter<T: Hash + Eq, U> {
handlers: HashMap<T, Vec<HandlerPtr<U>>>,
}
impl<T: Hash + Eq, U> EventEmitter<T, U> {
/// Creates a new instance of `EventEmitter`.
pub fn new() -> Self {
Self {
handlers: HashMap::new(),
}
}
/// Registers function `handler` as a listener for `event`. There may be
/// multiple listeners for a single event.
pub fn on<F>(&mut self, event: T, handler: F)
where
F: Fn(&U) + 'static,
{
let event_handlers =
self.handlers.entry(event).or_insert_with(|| vec![]);
event_handlers.push(Box::new(handler));
}
/// Invokes all listeners of `event`, passing a reference to `payload` as an
/// argument to each of them.
pub fn emit(&self, event: T, payload: U) {
if let Some(handlers) = self.handlers.get(&event) {
for handler in handlers {
handler(&payload);
}
}
}
}
fn main() {
let mut emitter = EventEmitter::new();
emitter.on(GreetEvent::SayHello, |name| {
println!("Hello, {}!", name);
});
emitter.on(GreetEvent::SayHello, |name| {
println!("Someone said hello to {}.", name);
});
emitter.on(GreetEvent::SayBye, |name| {
println!("Bye, {}, hope to see you again!", name);
});
emitter.emit(GreetEvent::SayHello, "Alex");
emitter.emit(GreetEvent::SayBye, "Alex");
}
- Ngôn ngữ chính
- JavaScript
- Star
- 23
- Fork
- 25
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của HowProgrammingWorks/EventEmitter
-
Тесты для EventEmitter Đang mở
HowProgrammingWorks/EventEmitter#14 · 1 người được giao ·
-
AsyncEmitter Đang mở
HowProgrammingWorks/EventEmitter#12 · 1 người được giao ·
Tất cả issue của HowProgrammingWorks/EventEmitter
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
avniproject/avni-client#2135 ·
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
babalae/bettergi-scripts-list#3674 ·
-
A-Release-Notes C-Editing D-Modest S-Ready-For-Implementation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
bevyengine/bevy-website#2595 ·
-
ecosystem wording
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
matrix-org/matrix.org#3649 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
vadimdemedes/ink#1029 ·