在ruby中,当'next'与'excell'混淆时,会混淆执行顺序
在ruby中,当'next'与'excell'混淆时,会混淆执行顺序,ruby,Ruby,next语句用于跳过循环的一部分并继续循环的下一次迭代。它可以与for和while语句结合使用 我见过人们在评估某个条件后,如果有复杂的代码段,也就是 next if @state!=:some_state # some long complicated code 现在我在我的IRB中玩了next,如下所示: n = 1 loop do n = n + 1 next unless n == 10 print "Good" break end # Good=> nil 上
next
语句用于跳过循环的一部分并继续循环的下一次迭代。它可以与for
和while
语句结合使用
我见过人们在评估某个条件后,如果有复杂的代码段,也就是
next if @state!=:some_state
# some long complicated code
现在我在我的IRB
中玩了next
,如下所示:
n = 1
loop do
n = n + 1
next unless n == 10
print "Good"
break
end
# Good=> nil
上面的人明白了。非常清楚
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi" unless n == 5
p "good"
break
end
#1hi
#2hi
#3hi
#4"good"
#=> nil
在上面的代码中,无法理解行将“hi”
和放在哪个顺序,除非n==5
执行。哪个先执行
下面的一个将导致无限循环
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi"; 2 + 3 unless n == 5
p "good"
break
end
鉴于这一点是好的:
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi", 2 + 3 unless n == 5
p "good"
break
end
#1hi
#5
#2hi
#5
#3hi
#5
#4"good"
#=> nil
请在此帮助我理解-这一个如何解决
永远循环?分号作为换行符求值,因此:
next puts "hi"; 2 + 3 unless n == 5
相当于:
next puts "hi"
2 + 3 unless n == 5
next puts("hi", 2 + 3) unless n == 5
因此,next
将始终被调用,您将有一个无限循环
逗号被求值为传递一组参数(通过put
方法签名将其解释为数组),因此:
相当于:
next puts "hi"
2 + 3 unless n == 5
next puts("hi", 2 + 3) unless n == 5
关于<代码>执行> 和<代码>,除非 -考虑以下内容:
unless n == 5
next puts "hi"
end
在本例中,很明显,除非首先计算
,否则,如果传递的条件计算为false,则执行下一个puts“hi”
语句。嗯:
next puts "hi" unless n == 5
是完全相同事物的简写。因此,除非
修饰符总是首先求值。当然,如果在中间插入一个分号,它会导致不同的评价,因为分号被评估为断线。 < P>条件必须先执行,否则,它如何知道是否对涉及语句的任何表达式进行评估?
至于您的第二个问题,对于循环,next表达式的值被忽略,表达式中的值仅用于从块返回值。因此,唯一使循环结束的是@sawa的中断可能的重复:这并不是真的相关,因为OP希望了解下一个
何时将根据尝试的条件执行modifier@sawa你能删除那个链接吗,因为这与我的问题无关?你的问题涉及执行next
的返回值,这就是链接问题的内容。你能帮我回答第一个问题吗?谢谢你关心我的痛苦。我一直在等你告诉我其他的事情。最后你听到了我的我很高兴next
通常用于跳过执行部分并将控件发送到开头。但是中间部分是如何放置“hi”
的。为什么next
不跳过这个语句呢?那么next
方法接受一个参数,所以它与编写next(输入“hi”)是一样的。
您能解释一下您的答案吗,只是为了清楚地理解?在行中,next将“hi”置为“hi”,除非当条件评估为false
时,n==5
,否则执行next
,但控制应转到块的开头。但如果是这样的话,如何将“hi”
放在执行位置。在这里我太困惑了。这种语句在实际中是如何工作的?虽然传递给循环中的next
的表达式不会返回,但仍将对其进行计算。这就是为什么next put“hi”
将生成输出。