LoginSignup
16
8

More than 5 years have passed since last update.

Rust で返り値を使わない旨を記述する

Last updated at Posted at 2014-12-31

このエラーと戦う:

warning: unused result which must be used, #[warn(unused_must_use)] on by default

例えば

こんなコード書くと出てくる:

print_foo.rs
use std::io::stdio::stdout;

fn main() {
    stdout().write_line("foo");
}
$ rustc print_foo.rs
print_foo.rs:4:5: 4:31 warning: unused result which must be used, #[warn(unused_must_use)] on by default
print_foo.rs:4     stdout().write_str("foo");
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~

このコード含めて大体のケースにおいては返り値を使ってきちんとエラー処理したほうが良いと思うんですが、今回は簡単のためこれを例にします。

このエラーは must_use がついた構造体が返り値を let x でバインドするわけでもなく、メソッドチェーンするわけでもない時に出ます。今回のケースだと返り値は Result なのでソースコードを見るとそう書いてあるのがわかります。

書き方 1. _ にしまう

他のいくつかの言語同様に Rust でも _ にしまうような記述をすると「その値は使わないよ」という意図になります。具体的にはこう書く:

print_foo.rs
use std::io::stdio::stdout;

fn main() {
    let _ = stdout().write_line("foo");
}

この書き方の起源って誰なんだろう。

書き方 2. attribute を指定する

結果を無視する記述をがある関数の attribute として allow(unused_must_use) を指定する。具体的にはこう書く:

print_foo.rs
use std::io::stdio::stdout;

#[allow(unused_must_use)]
fn main() {
    stdout().write_line("foo");
}

ただ、これだと、この関数(この例だと main)内すべてが無視されてしまい勿体無いので、_ にしまうのを推奨します。

ソースがドキュメント的なきちんとまとまったところのものを知ってる人は教えて下さい。

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8