はじめに
Julia の REPL の中で、プログラム・ソースを読み込む方法を紹介します。関連するディレクトリ操作の命令も説明します。
以下では、Windows上での実行例を示します。
include : プログラム・ソースを読み込む
include(path) は、外部ファイルを読み込んで評価(実行)します。path は、読み込むファイルのパス名です。
例えば、Windows ユーザの tenfu さんが、デスクトップに作った a.jl というファイルを読み込むには
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() で、カレント・ディレクトリの文字列が得られます。
julia> pwd()
"c:\\users\\tenfu\\desktop"
includeの引数に、相対パスを指定できます。
julia> include("test.jl")
julia> include("..\\desktop\\test.jl")
cd : カレント・ディレクトリを変更する
cd() で、カレント・ディレクトリを変更します。
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 )。
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の型を指定します。
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 の型を指定します。
julia> less(bar)
foo()
end
REPLとエディタを用いた開発手法
自分の使いなれたエディタで、Julia プログラムを編集しましょう。include命令を用いてソースプログラムを読み込んだら、REPLから、すぐに関数動作を試すことができます。
REPLや Jupyter で以前作業していた際、注意すべき振舞いに遭遇しました。( 例 → http://qiita.com/tenfu2tea/items/6bcbdd7586ea070cc25d の最終パラグラフからコメントの議論を参照。本文は 2015/12/23時点で未修正ですが、そのうち修正します)。この振舞いにびっくりないためにも、プログラムはファイルに書いて読み込んだ方がよいです。