我是一个非常强大的人。我在fortran中用一个类似循环的julia模型让我失去理智。 顺便说一句,goto语句在这个天真的尝试中并不起作用:
x == y ? continue : goto mark1
mark1:
println("hello")
提出:
syntax: extra token "mark1" after end of expression
答案 0 :(得分:2)
在一个函数中,@goto
现已实现。
function example(y)
for x in 1:1000
x == y ? continue : @goto mark1
end
@label mark1
println("hello")
end
有关详细信息,请参阅以下内容:
虽然传统上不考虑循环,但@goto
和@label
宏可用于更高级的控制流。一个用例是当一个部分的失败导致整个函数的重试时,通常在输入验证中有用:
function getsequence()
local a, b
@label start
print("Input an integer: ")
try
a = parse(Int, readline())
catch
println("Sorry, that's not an integer.")
@goto start
end
print("Input a decimal: ")
try
b = parse(Float64, readline())
catch
println("Sorry, that doesn't look numeric.")
@goto start
end
a, b
end
但是,使用递归通常更清楚这个用例:
function getsequence()
local a, b
print("Input an integer: ")
try
a = parse(Int, readline())
catch
println("Sorry, that's not an integer.")
return getsequence()
end
print("Input a decimal: ")
try
b = parse(Float64, readline())
catch
println("Sorry, that doesn't look numeric.")
return getsequence()
end
a, b
end
虽然两个例子都做同样的事情,但第二个更容易理解。但是,第一个更高性能(因为它避免了递归调用)。在大多数情况下,通话费用无关紧要;但在有限的情况下,第一种形式是可以接受的。
答案 1 :(得分:0)
我不完全确定这是一个格式正确的问题,但是有一个问题可以实现本地goto:https://github.com/JuliaLang/julia/issues/101。甚至还有一个带有原型实现的拉取请求,但它有点停滞不前。