タグ

2021年7月18日のブックマーク (9件)

  • Rustハンズオン@エウレカ社

    エウレカ社にてRustのハンズオンを実施しました。 コード全体は下記で確認できます。 https://github.com/yuk1ty/rust-basic-handson

    Rustハンズオン@エウレカ社
  • Rustで標準入力する(std::io::stdin().read_line()) - やってみる

    。 成果物 github 手順 プロジェクト作成 コード作成 実行 1. プロジェクト作成 $ cargo new rand20190519 --bin 2. コード作成 main.rs use std::io; fn main() { println!("標準入力テストです。任意の値を入力してください。"); let mut x = String::new(); io::stdin().read_line(&mut x) .expect("入力エラー。read_line()で失敗しました。"); println!("入力値: {}", x); } io::stdin().read_line()が主役。 3.実行 $ cargo run 標準入力テストです。任意の値を入力してください。 some 入力値: some 参考 Rust.チュートリアル.数当てゲーム.予想を処理する 対象環境

    Rustで標準入力する(std::io::stdin().read_line()) - やってみる
  • macro_rules! - Rust By Example 日本語版

    macro_rules! Rustはメタプログラミングを可能にする、パワフルなマクロシステムを備えています。これまで見てきたように、マクロは!で終わることを除けば関数のように見えます。関数と違うのは関数呼び出し(function call)を生成する代わりに、ソースコード中に展開され、周囲のプログラムとともにコンパイルされる点です。 しかし、Cやその他の言語のマクロが文字列のプリプロセッシングをするのと異なり、Rustのマクロは抽象構文木へと展開されるので、予期せぬprecendece(演算子の優先順位)のバグに出くわすことがありません。 マクロを作成するにはmacro_rules!というマクロを使用します。 // This is a simple macro named `say_hello`. // `say_hello`という名のシンプルなマクロ macro_rules! say_h

  • 構造体 - Rust By Example 日本語版

    構造体 structというキーワードを用いて作成できる構造体には3種類あります。 タプル。(すなわちタプルに名前が付いたようなもの) クラシックなC言語スタイルの構造体。 ユニット。これはフィールドを持たず、ジェネリック型を扱う際に有効です。 // An attribute to hide warnings for unused code. #![allow(dead_code)] #[derive(Debug)] struct Person { name: String, age: u8, } // A unit struct // ユニット struct Unit; // A tuple struct // タプル struct Pair(i32, f32); // A struct with two fields // 2つのフィールドを持つ(クラシックな)構造体 struct Po

  • トレイト - Rust By Example 日本語版

    トレイト トレイト(trait)とは任意の型となりうるSelfに対して定義されたメソッドの集合のことです。同じトレイト内で宣言されたメソッド同士はお互いにアクセスすることができます。 トレイトはあらゆるデータ型に実装することができます。以下の例ではまずAnimalというメソッドの集合を定義し、その後AnimalトレイトをSheepというデータ型に対して実装します。これによりAnimalのメソッドをSheepが使用することが可能になります。 struct Sheep { naked: bool, name: &'static str } trait Animal { // Associated function signature; `Self` refers to the implementor type. // 関連関数のシグネチャ。 // `Self` はこのトレイトを実装している型に

  • Rustでprintとread_lineを1行にする方法 - やってみる

    printはflushする必要がある。 成果物 github 問題 以下のように1行で標準出力+標準入力したい。 値を入力してください: <stdin待ち> 解決 use std::io; use std::io::Write; fn main() { print!("任意の値を入力してください: "); io::stdout().flush().unwrap(); let mut guess = String::new(); io::stdin().read_line(&mut guess) .expect("入力エラー。read_line()で失敗しました。"); } ポイント println!でなくprint!を使って末尾から改行を省く flush()を使ってprint!を即時出力する NG集 println! 2行になってしまう。 use std::io; fn main() {

    Rustでprintとread_lineを1行にする方法 - やってみる
  • フォーマットしてプリント - Rust By Example 日本語版

    フォーマットしてプリント プリント関係の機能はstd::fmtで定義される幾つかのマクロによって扱われます。このマクロには以下が含まれます。 format!: フォーマットされたテキストを文字列(String)型に書き込みます。 print!: format! と同様ですが、コンソール (io::stdout) にそのテキストを出力します。 println!: print!: と同じですが改行が付け加えられます。 eprint!: format! と同様ですが、標準エラー出力 (io::stderr) にそのテキストを出力します。 eprintln!: eprint!と同じですが改行が付け加えられます。 すべて同じやり方でテキストをパースし、正しくフォーマットできるかコンパイル時にチェックします。 fn main() { // In general, the `{}` will be au

  • 導出(Derive) - Rust By Example 日本語版

    導出(Derive) コンパイラには、#[derive]アトリビュートを用いることで型に対して特定のトレイトの標準的な実装を提供する機能があります。より複雑なことを行わせたい場合には、同名のトレイトを手動で実装することも可能です。 以下はderive可能なトレイトの一覧です。 型の比較に関連するトレイト: Eq, PartialEq, Ord, PartialOrd Clone, これはコピーによって&TからTを作成するトレイト Copy, to give a type 'copy semantics' instead of 'move semantics'. Hash, これは&Tからハッシュ値を計算するためのトレイト Default, これは空っぽのインスタンスを作成するためのトレイト Debug, これは{:?}フォーマッタを利用して値をフォーマットするためのトレイト // `Cen

  • RustのコピーセマンティクスをCopyトレイトを実装して確認する | DevelopersIO

    Rustの勉強してます、所有権のところでムーブセマンティクスとコピーセマンティクスという概念が登場しました。独自定義の型で挙動の違いを確認してみました。 こんにちは。サービスグループの武田です。 最近Rust勉強会が定期的に開催されていて、社内のRust熱(Rust愛?)が上がっています。 『The Rust Programming Language』勉強会 | シリーズ | DevelopersIO Rustの特徴的なメモリ管理モデルとして所有権があります。正直まだ勉強し始めなので、はっきり理解したと自信をもって言えませんが、所有権については完全に理解した *1といっても過言ではないでしょう。 ムーブセマンティクスとコピーセマンティクス Rustの値には所有権があり、その所有権をもっている変数を所有者と呼びます。ある値の所有者はただひとつの変数という制限があり、言い換えると同時に2つ以上

    RustのコピーセマンティクスをCopyトレイトを実装して確認する | DevelopersIO