Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@tenfu2tea

[Julia] REPLの中でプログラムソースを取り込むには

More than 5 years have passed since last update.

はじめに

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

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?