我对find
语句有问题。我有一组stuff
。我搜索了一个特定的项目,但没有找到它。如何调试以了解find
声明中的条件失败?查找语句中的调试逻辑
array.find {|x| (x.a == ::stuff::stuffiesA || x.a == ::stuff::stuffiesB) &&
x.b == thing &&
x.c == ::stuff::thingies}
我对find
语句有问题。我有一组stuff
。我搜索了一个特定的项目,但没有找到它。如何调试以了解find
声明中的条件失败?查找语句中的调试逻辑
array.find {|x| (x.a == ::stuff::stuffiesA || x.a == ::stuff::stuffiesB) &&
x.b == thing &&
x.c == ::stuff::thingies}
这将是太多的意见,所以重新发布:
我一般提取语句变量和步。大多数IDE都具有可变抽取的快捷方式。从RubyMine的一个是Ctrl+Alt+V
提取后,它看起来是这样的:
array.find {|x|
xa_eq_stuffies_a = (x.a == ::stuff::stuffiesA)
xa_eq_stuffies_b = (x.a == ::stuff::stuffiesB)
xb_eq_thing = (x.b == thing)
xc_eq_thingies = (x.c == thing)
(xa_eq_stuffies_a || xa_eq_stuffies_b) &&
xb_eq_thing && xc_eq_thingies
}
然后就可以正常调试。
您还可以使用tap()方法(需要红宝石> = 1.9)保存代码结构,但如果您使用的是IDE使用监视窗口来我反正是重构列车残骸:)
得到每个表达式的结果。例如。将x.a == ::stuff::stuffiesA
作为观察窗口中的表达式,然后设置一个断点。
,或者你可以改变轻微源,使你更容易
array.find {|x|
a = x.a == ::stuff::stuffiesA
b = x.a == ::stuff::stuffiesB
c = x.b == thing
d = x.c == ::stuff::thingies
(a || b) &&
c &&
d}
当然
,你应该为变量,不仅将帮助您调试也使代码更容易理解
使用合适的名称
将变量提取到变量中,将它们结合在最后一行,并通过 – kostja
步骤听起来似乎是一个好主意!我在哪里可以学习如何做到这一点? – Maidenone
我前面说过,我是ruby的新手,在搜索“ruby find”时很难在google上找到任何内容,甚至很难用combinde逻辑找到任何内容。 PLZ激励你的赞赏! – Maidenone