Rails 逻辑短路罢工了?还不快去改代码!

Catherine · 2022年04月22日 · 最后由 Linhai 回复于 2022年04月23日 · 406 次阅读

虽然有点标题党了,因为 condition 里其实不是逻辑运算符,而是 symbol。但看上去直觉就会觉得:恩,这应该短路才对。

class Boss < ApplicationRecord
  before_save :say_good, if: :case1 && :case2 && :im_fucked_up
  def case1
    false
  end

  def case2
    false    
  end

  def im_fucked_up
    puts "Fucked up"
  end

  def say_good
    puts "Im reallyyyyy fucked up"
  end
end

输出结果不会 Really fucked up。 也就是说,整体逻辑返回值依然是 OK 的,但看似像逻辑判断符的 Symbol 不会被短路。

不怕一万就怕万一,万一 condition 里不规范有写入的操作,那就真影响大了。

这个回调的 if 其实不是 if 关键字,它只是 before_save 的一个 key,对应的 value 是它的条件,所以其实用逻辑判断符去连接,是不太规范的。

1 楼 已删除

每次发帖我就觉得,夹杂一点 English 不用管换行,输出的时候自动前后加空格看上去真爽😂

确实,一眼看上去很反直觉。得避免这种写法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号