Loại đơn vị mong đợi '()', tìm thấy 'enum std :: option :: Option'

Aug 30 2020

Tôi có chức năng trông như thế này:

pub fn new(s: String) -> Option<i32> {
    if s.len() > 10 {
        None
    }
    Some(10)
}

Khi tôi cố gắng biên dịch điều này, tôi nhận được thông báo lỗi sau:

7 | /         if s.len() > 10 {
8 | |             None
  | |             ^^^^ expected `()`, found enum `std::option::Option`
9 | |         }
  | |         -- help: consider using a semicolon here
  | |_________|
  |           expected this to be `()`
  |
  = note: expected unit type `()`
                  found enum `std::option::Option<_>`

Tôi không chắc mình đang làm gì sai. Bất kỳ trợ giúp sẽ được đánh giá cao

Trả lời

3 Prime_Aqasix Aug 30 2020 at 13:28

Không có ;Trả lại chỉ có thể được sử dụng ở cuối một khối.

Để khắc phục điều này, bạn có thể:

pub fn new(s: String) -> Option<i32> {
    if s.len() > 10 {
        return None; // Add a early return here
    }
    Some(10)
}

Hoặc là

pub fn new(s: String) -> Option<i32> {
    if s.len() > 10 {
        None
    } else {
        Some(10)
    } // This is now the end of the function block.
}