ruby-on-rails - 链接方法时在哪里放置感叹号

标签 ruby-on-rails ruby

我有以下数组和方法:

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!文档:

returns nil if no changes were made.

糟糕!这可能会破坏您的整个链条。相反,您应该使用 delete_if ,它总是返回数组。

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

是的,令人困惑的是它没有爆炸声,但它确实就地修改了。来自文档:

The array is changed instantly every time the block is called, not after the iteration is over.

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

相关文章:

ruby-on-rails - 系统测试VS集成测试Rails 5.1?

ruby-on-rails - 如何使用 Ruby 从 Active Directory 中检索已删除的对象?

ruby-on-rails - Ruby(或 Rails): How can I apply a relative URL to a full URL?

ruby-on-rails - Bundler寻找旧版 gem

ruby-on-rails - 无方法错误 : undefined method `value_for_database' for #<Array> (Rails 5)

javascript - 如何使用 App.cable.subscriptions.remove 在 Rails 5 中删除 actioncable channel 订阅?

javascript - 使用 ruby​​ 在 js 文件中使用来自 localhost 的 json 数据

html - 链接到 Rails 中的根路径

css - 使用gulp + foundation(sass版)报错

ruby-on-rails - Ruby on Rails 3,多个域的电子邮件验证?