2014-07-02 14 views
8

W języku C można zadeklarować zmienne statyczne z lokalnym zakresem funkcji (example).Czy Julia obsługuje zmienne statyczne z zakresem funkcji

Czy można coś podobnego zrobić w Julii?

Moim przypadkiem użycia jest deklarowanie podfunkcji, ale nie chcę, aby Julia musiała je ponawiać za każdym razem, gdy wykonywany jest kod. Deklarowanie ich poza funkcją jest brzydkie i daje im większy zakres, którego chcę uniknąć.

przykład:

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

    ... 
    bar(y) 
    ... 
end 

Chociaż mogę zadeklarować bar() poza Foo(), wolałbym poprzeczkę być tylko w lokalnej przestrzeni nazw.

Dziękuję.

Odpowiedz

12

Możesz utworzyć nowy zakres wokół funkcji, aby zachować zmienną.

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

Potem tylko foo(x) będą widoczne na zewnątrz

4

Zauważ, że y musi być zmienna wpuścić odpowiedź @ ivarne, albo będzie on zastąpić dowolny y w zakresie globalnym:

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