1. tenfu2tea

    Posted

    tenfu2tea
Changes in title
+[Julia] REPLの中でプログラムソースを取り込むには
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,95 @@
+# はじめに
+ Julia の REPL の中で、プログラム・ソースを読み込む方法を紹介します。関連するディレクトリ操作の命令も説明します。
+ 以下では、Windows上での実行例を示します。
+
+# include : プログラム・ソースを読み込む
+ `include(path)` は、外部ファイルを読み込んで評価(実行)します。`path` は、読み込むファイルのパス名です。
+
+ 例えば、Windows ユーザの `tenfu` さんが、デスクトップに作った `a.jl` というファイルを読み込むには
+
+```jlcon
+julia> include("c:\\Users\\tenfu\\Desktop\\test.jl")
+bar (generic function with 1 method)
+```
+
+と打ち込みます。`\`は エスケープ文字ですから、二つ重ねないといけません (`\` は (半角の) `¥` に見えるかもしれません) 。
+ ファイルを読み込むと、そのファイルを評価した結果が印字されます。上では、関数 `bar` を定義したと表示されました。
+ 指定したパスにファイルが見つからないと
+`ERROR: could not open file ファイル名`
+という例外が発生します。
+
+# カレント・ディレクトリの操作
+ パス名は (カレント・ディレクトリを基準にした)相対パスで指定することもできます。そのためには、カレント・ディレクトリを操作できないといけません。Un*x シェルのコマンドと同じ命令が、Juliaで使えます。以下で説明しない命令は、Julia のドキュメントを参照してください → Julia FileSystem http://docs.julialang.org/en/release-0.4/stdlib/file/
+
+## pwd : カレント・ディレクトリを得る
+ `pwd()` で、カレント・ディレクトリの文字列が得られます。
+
+```jlcon
+julia> pwd()
+"c:\\users\\tenfu\\desktop"
+```
+
+ `include`の引数に、相対パスを指定できます。
+
+```jlcon
+julia> include("test.jl")
+julia> include("..\\desktop\\test.jl")
+```
+
+## cd : カレント・ディレクトリを変更する
+ `cd()` で、カレント・ディレクトリを変更します。
+
+```jlcon
+julia> cd("c:\\users\\tenfu\\Documents")
+
+julia> pwd()
+"c:\\users\\tenfu\\Documents"
+```
+
+## ファイル名は入力補完できる
+ REPLで、ファイル名・ディレクトリ名を補完できます。
+ 例えば、`cd("c:\\users\\tenfu\\` などと、ディレクトリの区切り文字 `\\`を打ち込んだ時点で、TAB文字を入力すると、そのディレクトリのファイル名一覧が得られます。
+ ファイル名を途中まで打ち込んだ時点で、それに続くファイル名の候補が一つしかなければ、TAB入力で補完されます
+
+# edit : エディタを起動する
+
+ `edit(path, [line])` で、エディタを起動します。`path` は編集するファイルのパス名です。第2引数 `line` は行番号です (省略すると `1` )。
+
+```jlcon
+julia> edit("c:\\users\\tenfu\\Desktop\\test.jl")
+Unknown editor: no line number information passed.
+The method is defined at line 1.
+julia>
+```
+ 起動するエディタは、環境変数 `JULIA_EDITOR`, `VISUAL`, `EDITOR` に (そのパスを)設定しておきます。
+ 起動するエディタが指定されていないと、`Unknown editor` のメッセージがでます。Windows環境では、そのファイルを編集するアプリケーションが起動されます (あるいは、それを指定するように促されます)。
+ エディタが起動すると、プロンプトに戻ります。
+
+ エディタの起動には、もう一つの方法があります。
+ `edit(func, [types])` とすると、関数 `func` を定義したファイルを編集します。第2引数 `type` (省略可)には、編集したい関数 `func`の型を指定します。
+
+```jlcon
+julia> edit(bar)
+Unknown editor: no line number information passed.
+The method is defined at line 7.
+```
+ 関数に複数の型があり特定できない場合は `ERROR: function has multiple methods;` の例外が出ます。`methods(func)` で関数型を調べて、特定しましょう。
+ この命令で編集できる関数は、プログラム・ソースが与えられた関数です。REPLから直接定義した関数は編集できません (残念です)。
+ ユーザが定義した関数だけでなく、Julia ライブラリの関数も、定義された場所が特定でき、編集できてしまいます。副作用を残さないように、注意してくださいね。
+
+# less : 関数定義を閲覧する
+ 
+ 関数定義を閲覧したいなら、`edit`ではなく、`less` を用いる方が安全です。
+ `less(func, [types])` とすると、関数 `func` を定義したソース(の部分)を閲覧できます。第2引数 `type` (省略可)には、閲覧したい関数 `func` の型を指定します。
+
+```jlcon
+julia> less(bar)
+ foo()
+end
+```
+
+# REPLとエディタを用いた開発手法
+
+ 自分の使いなれたエディタで、Julia プログラムを編集しましょう。`include`命令を用いてソースプログラムを読み込んだら、REPLから、すぐに関数動作を試すことができます。
+
+ REPLや Jupyter で以前作業していた際、注意すべき振舞いに遭遇しました。( 例 → http://qiita.com/tenfu2tea/items/6bcbdd7586ea070cc25d の最終パラグラフからコメントの議論を参照。本文は 2015/12/23時点で未修正ですが、そのうち修正します)。この振舞いにびっくりないためにも、プログラムはファイルに書いて読み込んだ方がよいです。