可能的重复:
i = true and false in Ruby is true?
What is the difference between Perl's ( or, and ) and ( ||, && ) short-circuit operators?
Ruby: difference between || and 'or'
||是否与rails中的or相同?
案例A:

 @year = params[:year] || Time.now.year
 Events.all(:conditions => ['year = ?', @year])

将在script/console中生成以下sql:
 SELECT * FROM `events` WHERE (year = 2000)

Case B:
 @year = params[:year] or Time.now.year
 Events.all(:conditions => ['year = ?', @year])

将在script/console中生成以下sql:
 SELECT * FROM `events` WHERE (year = NULL)

最佳答案

与或行为不同的原因是因为运算符的优先级。
和&&的优先级都高于赋值运算符,赋值运算符(=)的优先级高于和/或
所以你的表达式将被计算如下:
@year = params[:year] || Time.now.year
评估为
@year = ( params[:year] || Time.now.year )

@year = params[:year] or Time.now.year
评估为
( @year = params[:year] ) or Time.now.year
如果对优先权规则有疑问,请用括号把你的意思说清楚。

10-01 07:15
查看更多