2016-05-24 8 views
1

Julia verfügt über eine Reihe von internen Variablen wie WORD_SIZE (gibt an, ob das Zielsystem 32- oder 64-Bit ist) und CPU_CORES (Anzahl der derzeit verfügbaren CPU-Kerne).Wie listet man alle internen Variablen von Julia auf?

Gibt es in der Julia REPL eine Möglichkeit, all diese internen Variablen aufzulisten?

AFAIK, whos und names(Main) hat sie nicht zeigen ...

EDIT: Von diesem previous question on listing exported function names, ich sehe, dass names(Base) diese internen Variablen nicht zeigt, zusammen mit allen anderen exportierten Element im Base Modul.

+4

Diese Variablen sind in einem Submodul der Basis, 'whos (Base.Sys)' zeigt sie. – Gnimuc

+0

Danke! Setzen Sie das als Antwort, und ich werde das als richtig markieren, @GnimucK. – buruzaemon

+0

Das enthält nicht alle Variablen für mich, nur ein paar von ihnen. Nicht, sagen wir, JULIA_HOME, STDIN, ENV, etc. – DNF

Antwort

1

als @DNF oben im Kommentar darauf, whos(Base.Sys) wird nicht gedruckt, die alle interne (konstant) Variablen in Base. aber wir können diese Variablen direkt aus whos(Base) über suchen:

julia> whos(Base, r"^\s*[A-Z_]+$") 
          ARGS  0 bytes 0-element Array{UTF8String,1} 
          BLAS 214 KB  Module 
        CPU_CORES  8 bytes Int64 
         C_NULL  8 bytes Ptr{Void} 
        ENDIAN_BOM  4 bytes UInt32 
          ENV  0 bytes Base.EnvHash with 29 entries 
          FFTW 149 KB  Module 
          HTML 168 bytes DataType 
          I  8 bytes UniformScaling{Int64} 
          IO  92 bytes DataType 
        JULIA_HOME  66 bytes ASCIIString 
         LAPACK 933 KB  Module 
        LOAD_PATH 190 bytes 2-element Array{ByteString,1} 
          MIME 148 bytes DataType 
         OS_NAME  0 bytes Symbol 
         STDERR 217 bytes Base.TTY 
         STDIN  64 KB  Base.TTY 
         STDOUT 217 bytes Base.TTY 
         VERSION  40 bytes VersionNumber 
        WORD_SIZE  8 bytes Int64 

hierfür liegt in der Tatsache, dass Julias Konstanten GROSSBUCHSTABEN sind. Sie können feststellen, dass einige Modul s sind auch in der Liste, aber es ist einfach zu identifizieren. tatsächlich kann man eine komplexere Regex verwenden, um sie zu vertreiben.

Beachten Sie, dass diejenigen Variablen, die nicht in Base exportiert werden, nicht angezeigt werden. z.B.

whos(Base.Libdl) 
+0

Ah, ich habe auch versucht eine regexp zu benutzen, aber mit einer anonymen Funktion und 'finden'. Ihre Lösung ist viel besser. – buruzaemon