2014-07-02 4 views
8

In C kann man statische Variablen mit lokalem Funktionsumfang deklarieren (example).Unterstützt Julia statische Variablen mit Funktionsumfang?

Kann etwas ähnliches in Julia getan werden?

Mein Anwendungsfall deklariert Unterfunktionen, will aber nicht, dass Julia sie jedes Mal neu analysiert, wenn der Code ausgeführt wird. Sie außerhalb der Funktion zu deklarieren ist hässlich und gibt ihnen einen höheren Bereich, den ich vermeiden möchte.

Beispiel:

function foo(x) 
    static bar = t -> stuff with t 

    ... 
    bar(y) 
    ... 
end 

Während ich bar erklären könnte() außerhalb von foo(), würde ich bar lieber nur im lokalen Namensraum liegen.

Vielen Dank.

Antwort

12

Sie können einen neuen Bereich um die Funktion erstellen, um die Variable zu halten.

let 
    global foo 
    function bar(t) 
     #stuff with t 
    end 
    y = 2 
    function foo(x) 
     #... 
     bar(y) 
     #... 
    end 
end 

Dann nur foo(x) wird nach außen

4

Hinweis sichtbar sein, dass y Bedarf eine let Variable in @ ivarne Antwort auf sein, oder es wird jede y in globalem Gültigkeitsbereich überschreiben:

julia> y = 4 
4 

julia> let 
      global foo 
      function bar(t) 
       #stuff with t 
      end 
      y = 2 
      function foo(x) 
       #... 
       bar(y) 
       #... 
      end 
     end 
foo (generic function with 1 method) 

julia> y 
2