Редактирование значения внутри цикла for - PullRequest
1 голос
/ 20 марта 2019

В Джулии я очень удивлен, что следующее не работает:

# Make a random value
val = rand()
# Edit it *inside an if statement in a for loop*
for i in 1:10
    println("current value of val = ", val)
    if true
        val = val * 2. 
    end
end

Попытка запустить это приводит к:

UndefVarError: val not defined

Похоже, проблема if заявление.Например, это работает нормально (кроме редактирования val!):

val = rand()
for i in 1:10
    println("current value of val = ", val)
#    if true
#        val = val * 2. 
#    end
end

Почему это так?

1 Ответ

3 голосов
/ 20 марта 2019

Начиная с Julia версии 1.x, вам необходимо использовать ключевое слово global при обновлении глобальной переменной внутри цикла, поскольку она создает новую местный область действия:

julia> val = rand()
0.23420933324154358

julia> for i in 1:10
         println("Current value of val = $val")
         if true
           val = val * 2
         end
       end
ERROR: UndefVarError: val not defined
Stacktrace:
 [1] top-level scope at ./REPL[2]:2 [inlined]
 [2] top-level scope at ./none:0

julia> for i in 1:10
         println("Current value of val = $val")
         if true
           global val = val * 2
         end
       end
Current value of val = 0.23420933324154358
Current value of val = 0.46841866648308716
Current value of val = 0.9368373329661743
Current value of val = 1.8736746659323487
Current value of val = 3.7473493318646973
Current value of val = 7.494698663729395
Current value of val = 14.98939732745879
Current value of val = 29.97879465491758
Current value of val = 59.95758930983516
Current value of val = 119.91517861967031

julia>

См .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...