新手问题 '&.'这是什么语法?

msl12 · 2017年07月31日 · 最后由 msl12 回复于 2017年08月01日 · 1706 次阅读

看到 Ruby-China 源码里 app/model 里,有这么一段代码:

validate do
    ban_words = (Setting.ban_words_on_reply || '').split("\n").collect(&:strip)
    if body.strip.downcase.in?(ban_words)
      errors.add(:body, '请勿回复无意义的内容,如你想收藏或赞这篇帖子,请用帖子后面的功能。')
    end

    if topic&.closed?
      errors.add(:topic, '已关闭,不再接受回帖或修改回帖。')
    end

    if reply_to_id
      self.reply_to_id = nil if reply_to&.topic_id != self.topic_id
    end
  end

我看到这些&.的出现,以前似乎没见过,这是什么语法吗? 😃

这是 Ruby 2.3.0 新增的操作符,类似 try()。

http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/

避免 nil 报错

单身狗运算符 google 搜前两个都来自 RubyChina,不知道谁先给出的翻译。。。

jasl 回复

是我原创的。(至少在我回复帖子之前没有看到过同样的翻译。)

msg7086 回复

Excited!

原来如此啊~ 谢谢各位

msl12 关闭了讨论 08月01日 10:37
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册