在 Julia 逻辑问题中 while 循环出现 try/catch 错误

while loop with try/catch error in Julia logic problem

我正在尝试编写一个 while 循环来测试输入是否有效,并且它会不断询问用户是否坚持输入错误。如果它是有效的,程序就会继续。这就是我所在的位置。

while true
    try
        selected_row = readline()
        selected_row = parse(Int8, selected_row)
        break
    catch e
        if isa(e, LoadError)
            @warn "type a valid number between [1,8]"
        elseif isa(e, ArgumentError)
            @warn "type a valid number between [1,8]"
        end
    end
end

println("you chose (C|R) ($selected_row)")

问题是当输入正确时我得到一个错误。

LoadError: UndefVarError: selected_row not defined

while 循环创建一个新的作用域。现在解决问题的方法取决于您放置代码的位置。

如果它在里面,例如一个函数然后使用:

local selected_row

在循环之前(在函数体内)一切正常。

如果您的代码在顶级范围内,请写:

global selected_row = parse(Int8, readline())

在您的代码中,这将保证创建一个全局变量 selected_row

话虽如此,我建议您编写如下代码:

function get_int8()
    while true
        selected_row = tryparse(Int8, readline())
        isnothing(selected_row) || return selected_row
    end
end

selected_row = get_int8()