我在我的应用程序位指示保护的方法|| =是什么意思?
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
我想知道什么||=
手段? 我一直在努力寻找和发现,但无济于事。
我在我的应用程序位指示保护的方法|| =是什么意思?
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
我想知道什么||=
手段? 我一直在努力寻找和发现,但无济于事。
基本上,a ||= b
表示assign b to a if a is null or undefined or false (i.e. false-ish value in ruby)
,它是a = b unless a
的快捷方式。
还可以查看[Ruby编程/语法/运算符]上的*条件赋值*(http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#1._Assignment)。 – rdvdijk
重要的是要实现短路 - 如果'a'为'false-ish','b'不会运行(例如,通过不进行昂贵的db查询节省时间)。 –
它不是'a = b除非a'。请参阅http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html以更好地了解其实际工作原理。 – Sigurd
这是Ruby的一部分。
如果@current_user
是零还是假的,它将被a += b
,这相当于a = a + b
设置为User.find_by_id(session[:user_id])
ruby'a || = b'被称为“或 - 等于”运算符。如果a的布尔值为true(如果它既不是假也不是nil),它就是a的简短方式。如果不是,则它的值为b。
基本上,|| = B意味着分配B到A,如果是空的或未定义的或 假(在红宝石即假肥胖型值),它是一个快捷方式A = B,除非 一个。
份额|回答09月26日'11编辑在14:48
罗曼6,9711330
除了这个答案here`s一个例子 -
arr = nil || []
arr0 ||= []
arr <=> arr0 *#=> 0*
这意味着表达式和arr0
表达式是相等的。
希望这有助于更好地理解||=
运营商。
不知道该名称是否适用,但在C#中被称为空合并运算符http://msdn.microsoft.com/en-us/library/ms173224.aspx – kenny
谢谢大家帮助我,让我在正确的方向! – pka
重复:[在Ruby中'|| ='是什么意思?](http://StackOverflow.Com/q/995593/),[在Ruby中'|| ='是什么意思?](http:// StackOverflow (http://stackOverflow.Com/q/3945711/),[在Ruby变量赋值中的双重管道符号?](http://q/3800957 /),[红宝石中的'|| ='是什么? /StackOverflow.Com/q/4500375/),[“|| ='”操作数在Ruby中的含义是什么](http://StackOverflow.Com/q/5124930/),[什么是“||” ='意味着在Ruby语言中?](http://StackOverflow.Com/q/5230162/),[是红宝石运算符'|| ='智能?](http://StackOverflow.Com/q/2989862/)也许还有其他许多人。 –