我有以下数组和方法:

array = ["1", 0, "a", ""]
array.reject(&:blank?).map(&:to_i).reject{|i| i == 0}

如果我想使用感叹号(例如.map!(&:to_i))将更改保存在适当的位置,则应该将标记放在每个方法之后还是其他位置-在哪里?

最佳答案

感叹号不是修饰语。

array.reject!(&:blank?).map!(&:to_i).reject!{|i| i == 0}

然而,这段代码是微妙的错误从reject!文档:
如果未做任何更改,则返回nil。
哎呀这可能会打破你的整个链条相反,您应该使用delete_if,它总是返回数组。
array.delete_if(&:blank?).map!(&:to_i).delete_if{|i| i == 0}

是的,令人困惑的是它没有爆炸,但它确实在适当的地方进行了修改从文档中:
每次调用块时都会立即更改数组,而不是在迭代结束后。

关于ruby-on-rails - 方法链接在一起时在何处放置感叹号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39333939/

10-13 02:15