2014-07-02 14 views
8

Trong C, người ta có thể khai báo các biến tĩnh với phạm vi hàm cục bộ (example).Julia có hỗ trợ các biến tĩnh với hàm phạm vi

Có thể thực hiện điều gì đó tương tự ở Julia không?

Trường hợp sử dụng của tôi là khai báo chức năng con, nhưng không muốn Julia phải loại bỏ chúng mỗi khi mã thực thi. Khai báo chúng bên ngoài hàm là xấu và cho chúng phạm vi cao hơn, mà tôi muốn tránh.

dụ:

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

    ... 
    bar(y) 
    ... 
end 

Trong khi tôi có thể tuyên bố bar ​​() bên ngoài của foo(), tôi muốn thanh để chỉ có trong không gian tên địa phương.

Cảm ơn bạn.

Trả lời

12

Bạn có thể tạo phạm vi mới xung quanh hàm, để giữ biến.

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

Sau đó chỉ foo(x) sẽ hiển thị ra bên ngoài

4

Lưu ý rằng y nhu cầu là một biến let trong câu trả lời @ ivarne, hoặc nó sẽ ghi đè lên bất kỳ y trong phạm vi toàn cầu:

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 
Các vấn đề liên quan