犯迷糊了: 对 && 的错误理解
galeki
posted @ 2008年4月05日 17:32
in RoR
, 4432 阅读
&& 符号在 Ruby 中不仅仅是逻辑运算符 and,而且还常常拿来连接语句的执行,比方说:
-
@user = User.find(params[:id]) && @user.someattr = somevalue
这样只有前面的语句执行成功,找到了 @user,才会执行后面的设置语句,非常实用~
因为 Ruby 中在逻辑判断中等同于假的只有 nil 和 false,大部分语句只要成功执行,都不会返回 nil 或 false,所以一直以来,我就以为 && 之前的语句执行成功了,就会执行后面的语句,直到昨天写出了下面的代码:
-
@user.show_navbar_admin = false && @user.save
天真的我以为,前面的赋值语句执行成功,就会执行后面的保存,还顺便 One liner 了一把,哪知道,赋值语句的返回值就是被赋予的值, a = false 的返回值就是 false,所以后面的 @user.save 根本就没执行,纳闷了半天才醒过来……
以后再用 && 之前一定想清楚,语句间没有什么逻辑关系的,还是老老实实分成两行写吧,实在想 One liner,用分号分割一行内的语句:
-
@user.show_navbar_admin = false ; @user.save
2008年4月25日 03:24 (@user.show_navbar_admin = false).class == FalseClass && @user.save
2008年4月25日 05:50
2008年4月25日 23:51 我一直是这么用的:逻辑判断用&&,连续的行为用and(eg, redirect_to root_url and return false)。
2008年4月26日 02:54
是啊,本应该如此,却被我滥用了……
2023年4月28日 03:22
Initial You got a awesome blog .I determination be involved in plus uniform minutes. i view you got truly very functional matters , i determination be always checking your blog blesss. Orlando Termite Control
2023年4月28日 03:29
In this particular article, you will see a summary, satisfy browse this post. Lakeland exterminators
2023年6月18日 18:11
These things are very important, good think so - I think so too... tile murals