Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中,当'next'与'excell'混淆时,会混淆执行顺序_Ruby - Fatal编程技术网

在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”
将生成输出。