質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1083閲覧

Rustでファイルを分けてコードを書きたい

Yhaya

総合スコア439

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2019/08/25 12:32

環境

  • Ubuntu 18.04
  • cargo 1.36.0

発生している問題

今まで、コードをmain.rsに書いてきたが、モジュールとして分割したいと思ってファイルに分けた。

bash

1. 2├── Cargo.lock 3├── Cargo.toml 4├── src 5│   ├── lib.rs 6│   ├── main.rs 7│   └── reserve_request 8│   └── mod.rs 9└── target

新たにreserve_requestモジュールを作って、その中のmod.rsに分割したコードを移し、lib.rsに

rust

1pub mod reserve_requests;

と記述した。これをmain.rsから利用するために、

bash

1use reserve_request; 2 3//...

としたが、エラーが出てコンパイルが通らない。

bash

1error[E0432]: unresolved import `reserve_request` 2 --> src/main.rs:1:5 3 | 41 | use reserve_request; 5 | ^^^^^^^^^^^^^^^ no `reserve_request` external crate

こんな状況です。どうしたらモジュールを認識させられるでしょうか?よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rust

1use crate_name::reverse_request;

とする必要があります。なぜならcrate-name (lib)とcrate-name (bin)が存在するので(cargo metadataで見るとわかります)main.rsから見てcrate-name (lib)は外部crateと見做されるからです。使うitemのvisibilityもpubにする必要があります。

bash

1$ cargo metadata --format-version 1 | jq '.packages | map(select(.name == "crate-name")) | .[0].targets'

json

1[ 2 { 3 "kind": [ 4 "lib" 5 ], 6 "crate_types": [ 7 "lib" 8 ], 9 "name": "crate-name", 10 "src_path": "/path/to/crate-name/src/lib.rs", 11 "edition": "2018", 12 "doctest": true 13 }, 14 { 15 "kind": [ 16 "bin" 17 ], 18 "crate_types": [ 19 "bin" 20 ], 21 "name": "crate-name", 22 "src_path": "/path/to/crate-name/src/main.rs", 23 "edition": "2018", 24 "doctest": false 25 } 26] 27

投稿2019/08/25 13:13

qryxip

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yhaya

2019/08/25 13:51

なるほど、crateの名前から書かなくては行けなかったのですね。また、cargo metadataというコマンドも初めて知りました。勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問