2016-03-31 13 views
0

私がジュリアを使用していた限り、パッケージのインポートはトップレベルでしか行えないという印象を受けました。しかし、誰かが以下の作業を行うためのトリッキー/非公式の方法を見つけましたか?基本的に、私は条件付きでパッケージをインポートしたい。パッケージがインストールされている場合、私はそれをインポートしたいですが、インストールされていない場合、私はそれを含めたくないので(Juliaはそれを自動的にインストールしません)。 トップレベルでないパッケージのインポート

if Pkg.installed("my_package") != Void import my_package else ## DO NOT IMPORT my_package end

私はこれが不可能であることを理解し、これを行うための新しい方法があった場合にはジュリアがどのように変化しているかすぐに考えると、私は驚かないだろう。

答えて

2

あなたは、パッケージはあなたのためにこのチェックを行うための関数を作成することができますinstalled.Soない場合Pkg.installed()はvoid型を返します言ったように:

function load_if_installed(package_name) 
    if typeof(Pkg.installed(package_name)) == Void 
    println("package is not installed") 
    else 
    # load in package after parsing command 
    eval(parse("using $package_name")) 
end 
end 

load_if_installed("PyPlot") 
> 
load_if_installed("AWS") 
> package is not installed 

がインストールされていないジュリア0.4.5 AWSでこれを試してみましたPyPlotがインストールされています。 eval()parse()の機能の仕組みについては、metaprogramming sectionを参照してください。

+0

ニートトリック;私はいつもメタプログラミングを使用していますが、 'parse'で文をラップし、それを動作させるために' eval'のグローバルスコープを利用することは考えていませんでした!ありがとう! –

関連する問題