Rust'da kullanılmayan kod uyarılarını nasıl devre dışı bırakabilirim?


231
struct SemanticDirection;

fn main() {}
warning: struct is never used: `SemanticDirection`
 --> src/main.rs:1:1
  |
1 | struct SemanticDirection;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

Ciddi bir şey için bu uyarıları tekrar açacağım, ama sadece dille uğraşıyorum ve bu da yarasaları yönlendiriyor.

Koduma eklemeyi denedim #[allow(dead_code)], ama işe yaramadı.

Yanıtlar:


355

Şunlardan birini yapabilirsiniz:

  • allowBir yapıya, modüle, işleve vb. Bir özellik ekleyin :

    #[allow(dead_code)]
    struct SemanticDirection;
  • Bir sandık düzeyinde allowözellik ekleyin ; dikkat edin !:

    #![allow(dead_code)]
  • Şuraya ilet rustc:

    rustc -A dead_code main.rs
  • Kullanarak iletin cargoyoluyla RUSTFLAGSortam değişkeni:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
Sonuncusunun her şeyin yeniden derlenmesini tetikleyeceğini unutmayın.
Joseph Garvin

RUSTFLAGS ihtiyacım olan şey cargo test. Teşekkürler.
likebike

61

Bu uyarıyı devre dışı bırakmanın başka bir yolu da tanımlayıcının önüne önek eklemektir _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Bu, örneğin bir SDL penceresiyle faydalı olabilir:

let _window = video_subsystem.window("Rust SDL2 demo", 800, 600);

Alt çizgi ile önek adı olarak yalnız bir alt çizgi kullanmaktan farklıdır. Aşağıdakileri yapmak, istenen davranış olması muhtemel olmayan pencereyi hemen yok edecektir.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);

"Alt çizgiye atamak onu yok edecektir" davranışı tuhaf görünüyor (doğru olduğundan şüphe etmiyorum). Bunun için bir referansınız var mı?
Michael Anderson

4
@MichaelAnderson Bkz. "RAII. Yıkıcı yan etkisi için bir değişkenin var olmasını isteyebilirsiniz, ancak başka türlü kullanamazsınız. Bu değişken, _ için değişken bir bağlanma ve değer olmadığından, _ ifadenin sonunda bırakılacak. " dan stackoverflow.com/a/48361729/109618
David J.

9

Kodu herkese açık hale getirmek de uyarıları durdurur; eki yapmanız gerekecekmod de herkese açık .

Bir kütüphane yazarken bu mantıklıdır: kodunuz dahili olarak "kullanılmaz", çünkü istemci kodu tarafından kullanılması amaçlanmıştır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.