Почему переменные и элементы массива наследуются по-разному в Юлии? - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь понять правила прицела в Джулии.Я пробовал цикл for с z в качестве обычной целочисленной переменной:

z = 2
for i = 1:4
    z += 1
end
println(z)

, и это дает мне ошибку UndefVarError: z not defined, если я не поместил global z внутри цикла.

Однако, если я сделаю z массив 1x1, он будет прекрасно работать без global:

z = [2]
for i = 1:4
    z .+= 1
end
println(z)
$ julia test.jl
  [6]

В чем разница между областями действия массивов и переменных?

1 Ответ

1 голос
/ 20 июня 2019

Содержимое массива, назначенного глобальной переменной, имеет постоянный тип:

julia> a = [1]
1-element Array{Int64,1}:
 1

julia> push!(a, "s")
ERROR: MethodError: Cannot `convert` an object of type String to an 
    object of type Int64

И глобальные переменные типа const допускают ссылки в циклах.

...