2015-11-03 13 views
7

私はジュリアのドキュメントを踏襲:ジュリアはなぜこの複雑な表現でこの表現を表現していますか?

julia> :(a in (1,2,3)) 
:($(Expr(:in, :a, :((1,2,3))))) 

今で:(a in (1,2,3))==:($(Expr(:in, :a, :((1,2,3)))))、なぜジュリアは、このように、この式を表現し、$正確な手段を何でしょうか?? $は、グローバルスコープ内の次の式を評価するだけです。私はこれについてのドキュメントが不明であることを発見しました。

+0

ジュリア言語**メタプログラミングのドキュメントを参照してください。http://docs.julialang.org/en/latest/manual/metaprogramming – SalchiPapa

答えて

9

理由:(a in (1,2,3))が不自然に表示されます。

本質的にそのshow_unquoted以外:(1 + 1)は中置演算子とうまくフォーマットを+として認識と同じです。いずれの場合においても

:(...)$(...)ので:($(..thing..))まさにこの場合にExpr(:in,:a,:((1,2,3)))ある..thing..、ようなもので、ある意味で逆演算子です。

たとえば、この奇妙なことは:(1+1)にあります。出力は、typeof(:(1+1))==Exprが確認するように、Exprタイプです。実際にはExpr(:+,1,1)ですが、REPLにExpr(:+,1,1)と入力すると、:($(Expr(:+,1,1))) - Expr型付きオブジェクトの一般的な書式設定スタイルが表示されます。

show.jlを処理してinを修正すると、すばらしい変更になる可能性があります。しかし、この問題は無害で、フォーマットの表示に問題があります。

+6

少なくともjulia 'v" 0.5.0-dev + 1020以降"、' :(a in(1,2,3)) 'は、@ Chong Wangが期待しているように、正確に' :(a in(1,2,3)) 'を表示します。 ' – SalchiPapa

5

$はジュリアは、式だけでなく、文字列を補間するために、この表記法を使用し、補間指令である:

julia> a=1; 
julia> "test $a" # => "test 1" 
julia> :(b+$a) # => :(b + 1) 

あなたはジュリアREPLでコマンドを入力すると、コードがない場合、それはコマンドを評価しようとすると、最終的に; charを返すと結果が表示されるので、コマンドの実行時にREPLに表示される内容を印刷する機能に関連します。

julia> dump(:(a+b)) 
Expr 
    head: Symbol call 
    args: Array(Any,(3,)) 
    1: Symbol + 
    2: Symbol a 
    3: Symbol b 
    typ: Any 

julia> dump(:(a in b)) 
Expr 
    head: Symbol in 
    args: Array(Any,(2,)) 
    1: Symbol a 
    2: Symbol b 
    typ: Any 

それは両方の式がheadargsとしてExprの共通のデータ構造を使用することを、上記の試験から明らかだ:
はそうあなたが変数一つの可能​​性の本当の内容を確認したい場合はdump機能を使用することですtypなし$の内部にがあります。
は今評価し、印刷結果しよう:

julia> :(a in b) 
:($(Expr(:in, :a, :b))) 

julia> :(a+b) 
:(a + b) 

我々はすでに両方が同じ構造を作成するコマンドことを知っているが、REPLが良い:(a in b)の結果を表示することができない別のExprの結果Expr、それはなぜあります内部は$です。 :(a+b)を扱うときには、REPLは、よりインテリジェントに行うと、これがあることを理解:

Expr 
    head: Symbol call 
    args: Array(Any,(3,)) 
    1: Symbol + 
    2: Symbol a 
    3: Symbol b 
    typ: Any 

:(a+b)に等しいです。 Exprにするためshow機能は、一般的な印刷形式にin中置演算子とフォールバックを理解していないオブジェクト(show.jlshow_unquoted)を入力したため:($(Expr(...)))のよう

関連する問題