我有一行代码遍历数组并拒绝任何空元素:

survey.reject!(&:empty?).map! { |feedback| %(_"#{feedback}"_) }

如果整个数组为空,则按预期工作。如果数组中的一个元素不是空的,那么我将得到一个错误map!不存在。
但是,这没有问题:
survey.map! { |feedback| %(_"#{feedback}_") }

reject函数在整个数组为空时工作,map!版本在数组不为空时工作。如何才能最好地整合这些内容?

最佳答案

使用内建修饰符时必须小心作为the documentation for reject! says
删除块计算为true的self的每个元素,如果没有进行任何更改,则返回nil
由于这个特性,你不能像可靠地复制版本那样链接它们。
你能做的就是用两条线:

survey.reject!(&:empty?)
survey.map! { |feedback| %(_"#{feedback}"_) }

或者可以链重新分配:
survey = survey.reject(&:empty?).map { |feedback| %(_"#{feedback}"_) }

关于ruby-on-rails - 如何过滤出数组中的空元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38983589/

10-10 03:42