スキップしてメイン コンテンツに移動

Rustで科学計算 (3) 関数を別ファイルで定義する

main.rcの中ですべての関数を定義しようとすると, 往々にしてだらだらと長くなって可読性が損なわれます. そのような場合, Rustでは別ファイルを用意してその中で関数を定義することができます (関数のモジュール化).
ここではメイン関数は./src/main.rcに含まれるものとします. 関数を定義する別ファイルは./src/sample.rcとし, その中で定義された関数はmain.rc中でmod sample;とした上で sample::(関数名)と呼び出すことができます. ただしその際に./src/sample中の関数にはpub宣言が必要です.

./src/main.rcの記述

mod sample;

fn main() {
 let mut x: f64 = 1.;
 x = sample::times2( x );
 println!("{}", x );
}

./src/sample.rcの記述

pub fn times2( x: f64 ) -> f64 {
 2. * x
}
なお, この別ファイルの名称は./src/sample/mod.rsとすることもできます. この方が別ファイルを階層的に配置できるので, 大規模なプロジェクトでは有利かもしれません. 詳細は参考文献を見てください.

参考文献

  • コメント

    このブログの人気の投稿

    UbuntuのPDF編集ツールの使い方まとめ

    PDFtkやpoppler-utilsに含まれるツールを使ってPDFを編集するコマンドのまとめです. 0. インストール sudo apt install pdftk sudo apt install poppler-utils UbuntuあるいはBash on Windowsならaptコマンドで一発. 1. PDFの文書情報の表示 pdfinfo (ファイル名) 2. PDFの分割と結合 pdftk (入力ファイル) cat (ページの指定) output (出力ファイル) ページ数の指定は1-12 14-endみたいな形で書けばよい. 入力ファイルを複数指定してページ数の指定を省略すればPDFの結合ができる. 3. PDFをJPEG/PNGに変換 pdftoppm [オプション] (入力ファイル名) (出力ファイル名の接頭辞) JPEGが欲しい場合-jpegを, PNGが欲しい場合-pngをオプションに指定する. デフォルトの解像度はDPI150で粗すぎるのでオプションで-r 300ないし-r 600を指定すべき. 白黒画像にしたい場合は-monoないし-grayを指定 (個人的には-grayのが好み). 複数ページのPDFを変換すると, 出力ファイルは (出力ファイル名の接頭辞)-1.jpg (出力ファイル名の接頭辞)-2.jpg みたいな形で生成される. 4. PDFからテキストを抽出 pdftotext (入力ファイル名) (出力ファイル名) 出力ファイルの文字コードはUTF-8, 改行コードはLF. 出力ファイル名は省略可能. 5. PDFから画像を抽出 pdfimages [オプション] (入力ファイル名) (出力ファイル名の接頭辞) オプションについて: -pngでPNG, -jでJPEG, -tiffでTIFF形式で出力される (オプションなしだとPPM形式) 6. PDFを回転 pdftk (入力ファイル名) cat 1-end(向き) output (出力ファイル名) 向きとしてはleft, right, downまたはnorth, east, west, southが使用可能. ※向きを指定する前にスペースを入れるとエラーになる. 関連ページ...

    源ノ明朝/源ノ角ゴシックをLuaLaTeXで使用する (Windows)

    源ノ明朝 (Source Han Serif), 源ノ角ゴシック (Source Han Sans) はAdobeとGoogleが作成したCJKフォントで, オープンソースフォントとして公開されています (ライセンスはSIL Open Source License 1.1). 以下では, LuaTeXエンジンでこのフォントを (日本語で) 使用する方法を説明します. あるいは, otfファイルがダウンロードできれば, どのようなフォントにも適用可能です (PDFにフォント埋め込みすることに関してライセンスに注意が必要ですが). Windows10を前提としますが, 他の環境 (Linux/Mac) でもほぼ同じ方法で導入できるんじゃないでしょうか. 使用したのはTeX Live 2016 (LuaTeX-0.95) です.

    Rust でテキストファイルのインデントを整形

    インデントが不揃いなテキストファイルを整形したくなったので Rust コードを書いたお話。 いつかまた使えそうだけど保管するのが面倒なので、ここに放流しておく。 use std::fs::File; use std::io::{BufReader, BufRead, BufWriter, Write}; fn main() { // ファイル読み込み let file = File::open("input.md").unwrap(); let mut reader = BufReader::new(file); // 出力ファイルの確保 let file = File::create("output.md").unwrap(); let mut writer = BufWriter::new(file); // メインループ (各行ごとに処理) loop { // 一行ずつ読み出す let mut buf = String::new(); let num_bytes = reader.read_line(&mut buf).unwrap(); if num_bytes == 0 { // EOF に到達したらループを抜ける break; } else { // そうでないとき, 整形してファイルに書き出す. let output = format_text( buf ); writer.write(output.as_bytes()).unwrap(); } } } // 先頭が " " のとき 4 文字インデントに整形して返し, // そうでなければ入力を返す関数. fn format_text( buf: String ) -> String { if buf.chars().next() == Some(' ') { format!(...