TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Rust

IntelliJ IDEAでTODOがハイライトされない時

現象 IntelliJ IDEAで設定では正しく設定されているのにTODOがハイライトされない。 単純に再起動してもうまくいかない。 解決方法 1. プロジェクトを作るとそのルート直下に.ideaフォルダが作られ、設定関連のファイルが作られますが、.ideaフォルダを削除…

Rust: RefCellで囲んだFnMutはDerefMutが実装されていない

現象 f: RefCell<dyn FnMut()>> とした時に f.borrow_mut()() // この形式では呼べない とは呼べず、 (&mut *f.borrow_mut())(); と呼ばなくてはいけない 調査 rust - why DerefMut is not implemented for `std::cell::RefMut<'_, [..]>` which wraps FnMut? - Stack Ove</dyn>…

Rust: getterとsetter

Rustでgetterとsetterを作りたかたったので調べました。 oop - Writing getter/setter properties in Rust - Stack Overflow ↑のサイトから拝借して、単純化してみると以下になりました。 #[derive(Default)] struct Person { first_name: String, } impl Pe…

Rust:selfは糖衣構文

Rustのself引数まとめ - 簡潔なQ selfは糖衣構文で&が付いていようがついてなかろうが、引数を使う時はself。 &selfで定義して、使う時は&をとったselfで使うことに少しもやっとしていたので、理解できてよかった (&selfで定義するとselfが&selfとして利用で…

Rust: temporary value is freed at the end of this stat

現象 struct Note { name:String, } let name = note.name.trim(); println!("{}", name); こういうコードを書いたら以下のようなエラーがでた。 Rust: temporary value is freed at the end of this stat 原因 rust - Temporary value is freed at the end …

Rust: チルダを展開したい(ホームディレクトリ を取得したい)

パスにチルダ「~」を含んでいると展開してくれないのでcrateを利用してみました。 やりたいこと チルダを展開する サンプル GitHub - netvl/shellexpand: A library for shell-like expansions of variables in strings format!("{}", shellexpand::tilde("~…

Rust: サブモジュール内でmacroをimportしたい

サブモジュール内でマクロをインポートしようとすると以下のエラ〜メッセージが出ました。 extern crate` loading macros must be at the crate root 解決方法 How do you import macros in submodules in Rust? - Stack Overflow これにある通り、 #[macro_…

Rust: コンソールにダブルクォーツを表示させない「""」

consoleにダブルクォーツが表示されたり、表示されなかったりすることがあったので、気になったので、表示させない方法を調べました。 やりたいこと コンソールにダブルクオーツを表示させない 写真のようにlsが"ls"として表示されています。 解決方法 [Very…

Rust: std::process::Commandを使ってvimを立ち上げる

やりたいこと Rustで作ったスクリプトでVimを実行して起動させたい。 失敗したこと std::process::Command - Rust ここのサンプルのようにしたらできるのかなと思って、やってみました。結果は失敗 use std::process::Command; Command::new("view") .arg("t…

Rust: ファイル操作後はclose処理はしなくても良い

ファイル操作していた時に、ふとclose処理がないと思ったのですが、How to close a file? : rust スコープが終了するとdropが呼ばれ、ファイルが閉じてくれるので他の言語でよくあるcloseメソッドを呼ばなくても良い。 他の言語では python withをつけるとwi…

Rust: ターボフィッシュ コロンコロン::<>

意味 型を具体的に明示するときに使用します。 呼び方はターボフィッシュ(turbofish)。 左辺に型を書くのか、それともターボフィッシュで書くのが良いか? 左辺に型を書くべきかそれともターボフィッシュを使うのかどちらが良いか? Type Annotation in Bind…

Rust: 匿名ライフタイム

structにライフタイム付けたらimpl側でもライフタイムが必要です。 その時のライフタイムの記述は匿名ライフタイムとして記述できるようです。(Rust 2018) 現象 struct SysConfig<'a> { dir: String, extension: String, blacklist: &'a Vec<String>, } impl SysConf</string>…

Rust: use std::io::prelude::*;

Rustでファイル操作をするときにpreludeとuseするのが気になったので、備忘録として残します。 std::io::prelude std::io::prelude - Rust よく使用されるioのtraitをimportしてくれる便利なもの コード 以下のコードはファイルを読み込んでprintする use st…

Rust: VSCodeでlibに追加したものをuseすると補完が効かない時

lib.rsで追加したものをmain.rs内でuseして使おうとすると、VSCodeの補完が出ない時がありました。 現象 // プロジェクト名: osaka src > lib.rs > main.rs use osaka::Takoyaki; fn main() { let takoyaki = Takoyaki {x: 777}; } このような感じで記述する…

Rust: VSCodeでlibを追加すると認識してくれない時

VSCodeでRustを書いているのですが、libを追加して、それをmain.rs関数の中でuseしてもパスを認識してくれず、赤い波線が表示されてしまいます。rustのコンパイルは通るので文法は間違っていないはずです。Must reload VSCode window after adding lib.rs to…

Rust: gitのincludeIfで設定したgitconfigがCargo newで生成されるCargo.tomlに反映されない

現象 includeIfをしようしてgitconfigを切り替えている場合に、cargo new をするとCargo.tomlのauthorsに切り替えたgitconfigの情報が入らずに、globalで設定しているgitconfig情報が入ってしまう。例えばglobalのgitconfigの設定が username: global_takoy…

Rust: 型推論で型(タイプヒント)の部分省略

イテレーターの特定メソッドについて調べていたら、型を部分省略する方法があったのでメモします。イテレータRust 公式チュートリアルより抜粋 もしあなたが覚えているなら、 ::<> 構文で型ヒント(type hint)を与え、整数型のベクタが欲しいと伝えることがで…

Rust: enumのコンストラクターは関数のようにふるまえる

stringの限界 | Rust by Example Rust Examplesよりmap_errの引数は関数であるのにenumを直接ドーンと代入している箇所があって、どういうことか疑問に思ったので調べてみました。 現象 map_errの引数はFnOnce(E) -> Fであるのに関数の代わりにenumを渡して…

Rust: エラー処理のための「Try!」と「?」

try!入門 | Rust by Example こちらのサンプルコードで fn setup() -> std::io::Result<()> { let mut a = try!(File::create("a")); try!(a.write_all(b"grape")); let mut b = try!(File::create("b")); b.write_all(b"fruit") } を実行すると expected ex…

Rust: map VS and_then

Rustのmapとand_thenが最初見たときにどちらも加工するという処理なのに、どういう時に使いわけるかイメージできなかったので、まとめてみました。 (Option型にも使用できますが、例はResultにしています。) map returnの型: Result functionの型: FnOnce(T)…

Rustのライフタイムはスコープとは同じものではない

ライフタイムとは ライフタイム | Rust by Example コンパイラ(借用チェッカーと呼ばれる場合もあります)が、全ての借用に問題がないことを確認するために使用する仕組み ざっくりライフタイムの使い所 借用するときに使える (&とほぼペア) ライフタイムの例…

Rust: Traitの匿名の引数 (Anonymous trait parameter)は廃止されていた

関連型が必要になる状況 | Rust by Example このサンプルを行っていた時に trait Contains<A, B> { fn contains(&self, &A, &B) -> bool; } // expected one of `:`, `@`, or `|`, found `)` が出て動作しませんでした。 https://users.rust-lang.org/t/solved-exa</a,>…

Rustでmodはネストできない

ファイルの階層構造 | Rust by Examplemodの使い方を練習していたのですが、サンプルではmy/mod.rsにもmodを書いて階層化をしていたので、パスのようにmod my::nestedでnestedファイルのfunctionだけ呼びたい場合、できるかどうか試してみましたが、できませ…

Rust 範囲のシンタックス 「...」VS 「..=」

match | Rust by Example このサイトでパターンマッチの練習していた時に範囲を表す記法で...を使うと警告が出ました fn main() { let number = 13; println!("Tell me about {}", number); match number { // 単一の値とのマッチをチェック 1 => println!("…

Rust: i8のキャストと2の補数

型キャスティング | Rust by Example このサイトで型キャスティングを学びました。 その時 2の補数で型のキャスティングが行われると符号が反転する場合があることを知りましたので、まとめてみます。 現象 // 符号付きの型にキャストする場合、結果は以下の…

RustのLinked ListのサンプルでBox<T>の使い方を学習した

Digital Puppet - プログラミングパズルTatsuya Nakanoゲーム無料apps.apple.com Linked ListのサンプルでBoxの使い方が出ていて、理解が深まったので備忘録として置いておきます。 コード テストケース: 連結リスト | Rust by Example ここより拝借 use Lis…

VSCodeでRustインストールしたのに「Rustup not available」が出るとき (備忘録)

Rustインストールしたのになぜか、「Rustup not available」が出てきて、左下のところでrustを解析中みたいな感じで、くるくるローディングし続けていたので、検索したら以下の記事がヒットしました。 qiita.com手順は Rustインストール Pathを通す VSCodeの…