はじめに
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時点で未修正ですが、そのうち修正します)。この振舞いにびっくりないためにも、プログラムはファイルに書いて読み込んだ方がよいです。