Как использовать lazy_static! внутри структуры импл? - PullRequest
0 голосов
/ 04 мая 2019
#[derive(Serialize)]
pub struct SLPInfoVersion {
    name: String,
    protocol: i32
}

impl SLPInfoVersion {
    lazy_static! {
        pub static ref V1_13: MyStruct = (SLPInfoVersion {
            name: "1.13".to_string(),
            protocol: 404
        });
    }
}

Вызов lazy_static! выдает мне эту ошибку:

error: expected one of `(`, `async`, `const`, `default`, `existential`, `extern`, `fn`, `type`, or `unsafe`, found `struct`                      
   --> src\protocol\packet\mod.rs:244:2                                                                                                          
    |                                                                                                                                            
244 |         lazy_static! {                                                                                                                     
    |    _____^                                                                                                                                  
    |   |_____|                                                                                                                                  
    |  ||_____|                                                                                                                                  
    | |||                                                                                                                                        
245 | |||         pub static ref V1_13: SLPInfoVersion = (SLPInfoVersion {                                                                       
246 | |||             name: "1.13".to_string(),                                                                                                  
247 | |||             protocol: 404                                                                                                              
248 | |||         });                                                                                                                            
249 | |||     }                                                                                                                                  
    | |||     ^                                                                                                                                  
    | |||_____|                                                                                                                                  
    | ||______expected one of 9 possible tokens here                                                                                             
    | |_______unexpected token                                                                                                                   
    |         in this macro invocation                                                                                                           
    |                                                                                                                                            
    = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

Я использую Rust 1.32.0.

1 Ответ

0 голосов
/ 06 мая 2019

Вы не можете.lazy-static работает, создавая новый скрытый тип, а также переменную static этого типа.Ни один из них не может быть создан в блоке impl:

struct Foo;

impl Foo {
    static BAR: u8;

    struct Bar;
}
error: expected one of `async`, `const`, `crate`, `default`, `existential`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `static`
 --> src/lib.rs:4:5
  |
3 | impl Foo {
  |           - expected one of 11 possible tokens here
4 |     static BAR: u8;
  |     ^^^^^^ unexpected token

error: expected one of `async`, `const`, `crate`, `default`, `existential`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `struct`
 --> src/lib.rs:6:5
  |
4 |     static BAR: u8;
  |                    - expected one of 11 possible tokens here
5 |     
6 |     struct Bar;
  |     ^^^^^^ unexpected token

Вместо этого используйте его вне блока impl или внутри функции.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...