Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

このエラーと戦う:

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)内すべてが無視されてしまい勿体無いので、_ にしまうのを推奨します。

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

k_ui
ねこほしい
http://k-ui.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away