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

Catherine · April 22, 2022 · Last by Linhai replied at April 23, 2022 · 407 hits

虽然有点标题党了,因为 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 Floor has deleted

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.