Джулия - ОШИБКА: UndefVarError: не определено - PullRequest
0 голосов
/ 27 июня 2019

У меня есть кусок кода, который работает вне цикла, но не работает внутри цикла.

См:

julia> margin = 1
1

julia> rat = [-0.3 ; -0.8]
2-element Array{Float64,1}:
 -0.3
 -0.8

julia> beta = 0
0

julia> for q=1:2
           if rat[q] - margin > beta
               beta = rat[q] - margin
           end
       end
ERROR: UndefVarError: beta not defined
Stacktrace:
 [1] top-level scope at ./REPL[803]:2 [inlined]
 [2] top-level scope at ./none:0

julia> q=1
1

julia> if rat[q] - margin > beta
           beta = rat[q] - margin
       end

julia> q=2
2

julia> if rat[q] - margin > beta
           beta = rat[q] - margin
       end

Может кто-нибудь объяснить эту ошибку («ОШИБКА: UndefVarError: бета не определена»)?

(у меня Julia v "1.1.1", на Mac OSX)

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

У Юлии очень специфический подход к глобальному охвату. Правила переменной области видимости можно прочитать здесь: https://docs.julialang.org/en/v1/manual/variables-and-scoping/#Global-Scope-1. Новые правила области были введены в Julia-1.0, и они были весьма спорными в сообществе, особенно из-за неинтуитивного поведения циклов for в глобальной области видимости. Для крайне заинтересованных здесь обсуждаются плюсы и минусы:

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

Добавление global до того, как переменная сработает для меня:

for q=1:2
  if (rat[q] - margin) > beta
    global beta = rat[q] - margin
  end
end
...