给出以下代码:
require 'pry-byebug'
10.times.with_index do |i|
binding.pry
puts i
end
我想i == 5
在里面时“循环直到破裂” pry-byebug
。通过运行它help break
,您似乎可以通过“ breakpoint#”或“ line#”来识别断点。似乎您也可以使用条件,但是我无法使用它:
尝试在第#行上设置断点:
$ ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:5 if i == 5
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 5 (Enabled) Condition: i == 5
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> continue
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> i
=> 1
首先设置断点,然后将条件置于断点上:
➜ ~/D/w/t/pry_debug ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:15
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 15 (Enabled)
[2] pry(main)> break --condition 1 i == 5
[3] pry(main)> c
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[3] pry(main)> i
=> 1
如您所见,在两种情况下pry-byebug
都不遵守条件,因为它停止得太早了。我该如何工作?
binding.pry
从循环内部删除并将其放在前面10.times
:
binding.pry
10.times.with_index do |i|
然后运行代码。当它达到断点时,请使用您想要和的条件设置一个新的断点continue
。
回到您的实际代码。不要这样做:
10.times.with_index do |i|
相反,这几乎可以做同样的事情,但是更简单:
10.times do |i|
这是Ruby在做什么:
>> 2.times.with_index.to_a
[
[0] [
[0] 0,
[1] 0
],
[1] [
[0] 1,
[1] 1
]
]
与
>> 2.times.to_a
[
[0] 0,
[1] 1
]
首先是传入的数组[0,0]
,[1,1]
等等,所以对于你的正确性块参数需要是这样的:
10.times.with_index do |i, j|
第二个仅传递当前的“ times”值,从而产生更简单的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句