为什么|| 和/或在rails中表现不同?

ohh*_*hho 3 ruby ruby-on-rails

可能重复:
Ruby中的i = true和false是真的吗?
Perl(或,和)和(||,&&)短路运营商之间有什么区别?
Ruby:||之间的区别 和'或'

||一样or的Rails的?

案例A:

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

将产生以下SQL script/console:

 SELECT * FROM `events` WHERE (year = 2000)
Run Code Online (Sandbox Code Playgroud)

案例B:

 @year = params[:year] or Time.now.year
 Events.all(:conditions => ['year = ?', @year])
Run Code Online (Sandbox Code Playgroud)

将产生以下SQL script/console:

 SELECT * FROM `events` WHERE (year = NULL)
Run Code Online (Sandbox Code Playgroud)

Ste*_*eet 9

||的原因 和/或表现不同是因为运算符优先级.

两个|| 和&&的优先级高于赋值运算符,赋值运算符(=)的优先级高于和/或

所以你的表达式实际上将按如下方式进行评估: -

@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

如果对优先规则有疑问,请使用括号使您的意思清楚.


归档时间:

查看次数:

5836 次

最近记录:

14 年,11 月 前