タグ付けされた質問 「rust」

Rustは、安全性、速度、同時実行性の3つの目標に焦点を当てたガベージコレクターのないシステムプログラミング言語です。Rustで記述されたコードに関する質問には、このタグを使用します。[rust-2018]など、特定のエディションを必要とするコードを参照する質問には、エディション固有のタグを使用します。[rust-cargo]や[rust-macros]などのサブトピックには、より具体的なタグを使用してください。

1
クロージャーはいつFn、FnMut、FnOnceを実装しますか?
クロージャーが、およびトレイトを実装するための特定の条件は何ですか?FnFnMutFnOnce あれは: クロージャーはいつFnOnceトレイトを実装しないのですか? クロージャーはいつFnMutトレイトを実装しないのですか? クロージャーはいつFnトレイトを実装しないのですか? たとえば、本体のクロージャの状態を変更すると、コンパイラはそのクロージャを実装Fnしなくなります。
114 rust  closures 

2
ジェネリック型ではなく関連型を使用するのが適切なのはいつですか?
でこの質問、問題は、関連する型にジェネリック型パラメータを使用しての試みを変更することで解決できることを生じました。そのため、「ここでは関連するタイプの方が適しているのはなぜですか?」という質問があり、詳細を知りたくなりました。 関連するタイプを導入RFCは言います: このRFCは、以下によって特性マッチングを明確にしています。 すべての形質型パラメータを処理する入力タイプ、および 出力タイプである関連タイプを提供します。 RFCは動機付けの例としてグラフ構造を使用しており、これはドキュメントでも使用されていますが、型パラメーター化バージョンよりも関連する型バージョンの利点を十分に理解していないことを認めます。主なことは、distanceメソッドがEdgeタイプを気にする必要がないことです。これはいいですが、関連する型がある理由は少し浅いようです。 関連付けられた型は実際に使用するとかなり直感的であることがわかりましたが、自分のAPIでそれらをどこでいつ使用するかを決定するときに苦労しています。 コードを作成するとき、ジェネリック型パラメーターよりも関連する型を選択する必要があるのはいつですか?
108 types  rust  idiomatic 

5
Rustでグローバル変数を使用することは可能ですか?
一般的に、グローバル変数は避けるべきです。それでも、実用的な意味では、(変数がプログラムに不可欠な状況では)使用することが望ましい場合があると思います。 Rustを学ぶために、現在、GitHubでsqlite3とRust / sqlite3パッケージを使用したデータベーステストプログラムを作成しています。その結果、(私のテストプログラムでは)(グローバル変数の代替として)約12個ある関数間でデータベース変数を渡す必要があります。以下に例を示します。 Rustでグローバル変数を使用することは可能で、実行可能で、望ましいですか? 以下の例で、グローバル変数を宣言して使用できますか? extern crate sqlite; fn main() { let db: sqlite::Connection = open_database(); if !insert_data(&db, insert_max) { return; } } 次のことを試しましたが、正しくないようで、以下のエラーが発生しました(unsafeブロックでも試しました)。 extern crate sqlite; static mut DB: Option<sqlite::Connection> = None; fn main() { DB = sqlite::open("test.db").expect("Error opening test.db"); println!("Database Opened OK"); create_table(); println!("Completed"); } // Create …

4
モジュールファイル間でマクロを使用するにはどうすればよいですか?
同じクレート内の別々のファイルに2つのモジュールがあり、クレートがmacro_rules有効になっています。あるモジュールで定義されたマクロを別のモジュールで使用したい。 // macros.rs #[macro_export] // or not? is ineffectual for this, afaik macro_rules! my_macro(...) // something.rs use macros; // use macros::my_macro; <-- unresolved import (for obvious reasons) my_macro!() // <-- how? 私は現在、コンパイラエラー " macro undefined: 'my_macro'" ...をヒットしました。これは理にかなっています。マクロシステムは、モジュールシステムの前に実行されます。どうすればそれを回避できますか?
104 module  rust  rust-macros 

3
Cargoで複数のバイナリを構築するにはどうすればよいですか?
UNIXソケットを介して接続するadaemonとaを使用してプロジェクトを作成したいと思いclientます。 Aclientとaにdaemonは2つのバイナリが必要Cargoですが、2つの異なるソースから2つのターゲットを構築するように指示するにはどうすればよいですか? ちょっとしたファンタジーを追加するlibraryために、の主要部分にを用意し、daemonそれをラップしてソケットを介して通信するためのバイナリを用意したいと思います。 したがって、この種のツリーアーキテクチャがあります。 ├── Cargo.toml ├── target | └── debug | ├── daemon │ └── client └── src ├── daemon │ ├── bin │ │ └── main.rs │ └── lib │ └── lib.rs └── client └── bin └── main.rs 両方の懸念を管理する1つの実行可能ファイルを作成することもできますが、それが非常に良い方法でない限り、それは私がやりたいことではありません。
103 rust  rust-cargo 

1
Rust構造体の変数を初期化するためのより速い/より短い方法はありますか?
次の例では、フィールドの宣言で、構造体の各フィールドに値を割り当てることをお勧めします。または、フィールドに値を割り当てるために、フィールドごとに1つの追加ステートメントを効果的に使用します。私ができることは、構造体がインスタンス化されるときにデフォルト値を割り当てることだけです。 これを行うためのより簡潔な方法はありますか? struct cParams { iInsertMax: i64, iUpdateMax: i64, iDeleteMax: i64, iInstanceMax: i64, tFirstInstance: bool, tCreateTables: bool, tContinue: bool, } impl cParams { fn new() -> cParams { cParams { iInsertMax: -1, iUpdateMax: -1, iDeleteMax: -1, iInstanceMax: -1, tFirstInstance: false, tCreateTables: false, tContinue: false, } } }
102 rust 

2
ローカルの未公開のクレートを使用する方法は?
ライブラリを作成しました: cargo new my_lib そのライブラリを別のプログラムで使用したいのですが。 cargo new my_program --bin extern crate my_lib; fn main { println!("Hello, World!"); } これを機能させるために何をする必要がありますか? 同じプロジェクトフォルダーにありません。 . ├── my_lib └── my_program うまくいけば、これは理にかなっています。 貨物ガイドに従ってパスを上書きできると思いましたが、 この機能を使用して、地元の未公開の箱を見つける方法をCargoに指示することはできません。 これは、Rustの最新の安定バージョン(1.3)を使用している場合です。

1
HashMapを効率的に検索して挿入する方法は?
次のことを行いたいのですが。 Vec特定のキーのa を検索し、後で使用できるように保存します。 存在しない場合Vecは、キーに空を作成しますが、それを変数に保持します。 これを効率的に行う方法は?当然私は私が使うことができると思ったmatch: use std::collections::HashMap; // This code doesn't compile. let mut map = HashMap::new(); let key = "foo"; let values: &Vec<isize> = match map.get(key) { Some(v) => v, None => { let default: Vec<isize> = Vec::new(); map.insert(key, default); &default } }; 私がそれを試したとき、それは私に次のようなエラーを与えました: error[E0502]: cannot borrow `map` as …
102 hashmap  rust  lookup 

5
モジュールを複数のファイルに分割する
それぞれ独自のファイルにある複数の構造体を含むモジュールが必要です。Math例としてモジュールを使用する: Math/ Vector.rs Matrix.rs Complex.rs 次のように、各構造体をメインファイルから使用する同じモジュールに配置します。 use Math::Vector; fn main() { // ... } しかし、Rustのモジュールシステム(最初は少し混乱します)は、これを行う明確な方法を提供していません。モジュール全体を1つのファイルに入れることだけができるようです。これは素朴ですか?そうでない場合、どうすればよいですか?
102 module  rust 

3
RustでQuakeの高速InvSqrt()関数を書くことは可能ですか?
これは私自身の好奇心を満たすためです。 これの実装はありますか: float InvSqrt (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df - (i>>1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x); return x; } ルストで?存在する場合は、コードを投稿してください。 私はそれを試して失敗しました。整数形式を使用して浮動小数点数をエンコードする方法がわかりません。これが私の試みです: fn main() { println!("Hello, world!"); println!("sqrt1: {}, ",sqrt2(100f64)); } fn sqrt1(x: f64) -> f64 { x.sqrt() } …


1
Rustの慣用的なコールバック
C / C ++では、通常、プレーンな関数ポインターを使用してコールバックを実行し、void* userdataパラメーターも渡す可能性があります。このようなもの: typedef void (*Callback)(); class Processor { public: void setCallback(Callback c) { mCallback = c; } void processEvents() { for (...) { ... mCallback(); } } private: Callback mCallback; }; Rustでこれを行う慣用的な方法は何ですか?具体的には、setCallback()関数はどのタイプを取る必要mCallbackがあり、どのタイプにする必要がありますか?それはかかるべきFnですか?多分FnMut?保存しBoxedますか?例は素晴らしいでしょう。
100 callback  rust 

5
カスタムステップを使用して範囲を反復処理するにはどうすればよいですか?
Rustの範囲を1以外のステップで反復するにはどうすればよいですか?私はC ++のバックグラウンドから来ているので、次のようなことをしたいと思います。 for(auto i = 0; i <= n; i+=2) { //... } Rustではrange関数を使用する必要がありますが、カスタムステップを使用するために使用できる3番目の引数がないようです。どうすればこれを達成できますか?
100 rust 


2
タイプを移動のみでコピー不可にすることはできますか?
編集者注:この質問はRust 1.0より前に行われたものであり、質問の一部の主張はRust 1.0では必ずしも当てはまりません。一部の回答は、両方のバージョンに対応するように更新されています。 私はこの構造体を持っています struct Triplet { one: i32, two: i32, three: i32, } これを関数に渡すと、暗黙的にコピーされます。さて、時々私はいくつかの値がコピー可能ではないために移動する必要があると読みました。 この構造体Tripletをコピー不可にすることは可能ですか?たとえば、Tripletコピー不可、つまり「移動可能」にする特性を実装することは可能でしょうか? Clone暗黙的にコピーできないものをコピーするためにトレイトを実装する必要があることをどこかで読みましたが、暗黙的にコピー可能なものを持ち、それを代わりに移動できるようにコピー不可にすることについては逆に読みませんでした。 それでも意味がありますか?
96 rust 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.