Tôi muốn người dùng chuyển các đối số dòng lệnh đến một hàm đơn giản mà tôi đã viết trong Rust. Tôi biết rằng tôi có thể sử dụng int::from_str(args[1])
để chuyển đổi, nhưng điều này trả về một Option<int>
, có nghĩa là để chuyển nó vào một hàm mất int
, như dưới đây, tôi phải sử dụng câu lệnh match
. Nhưng với các đối số n, có 2^n khả năng. Viết một loạt các câu lệnh lồng nhau match
với một cái gì đó sẽ là khủng khiếp. Sẽ rất lý tưởng nếu có cách để làm điều gì đó như:Kiểm tra loại Rust enum bằng boolean?
// will return either Some(int) or None
let start = int::from_str(args[1]), end = int::from_str(args[2]);
if typeof(start) == Some && typeof(end) == Some {
println(fmt!("You entered: %d, %d", start, end);
} else {
println("Error with arguments.");
}
Có phương pháp nào như vậy không? Điều đó cho phép tôi kiểm tra thành viên của một cái gì đó enum là bên cạnh match
?
Ah, tôi không biết bạn có thể thực hiện nhiều đối số trong một trận đấu. Thật tuyệt. Tôi lấy nó, sau đó, rằng phương pháp 'is_some()', và giống như nó, sẽ cần phải được viết rõ ràng cho bất kỳ loại nào ra khỏi đó? –
@ limp_chimp, đúng, có '.is_some()' được định nghĩa trên 'Tùy chọn' trong thư viện chuẩn; nhưng nếu bạn định nghĩa enums của riêng mình, sẽ không có phương pháp tự động như thế. – huon
@limp_chimp: và thực sự nếu bạn nhìn vào việc thực hiện 'is_some', đó là'! Self.is_none() ', là' match * self {None => true, Some (_) => false} '. (Nhưng lo sợ không cho một hit hoàn hảo cho các cuộc gọi phương thức bổ sung, tất cả đều được đánh dấu '# [inline]'.) –