And*_*Gis 0 ruby ruby-on-rails
我刚刚遇到了一段有趣的代码.我想确定它是红宝石标准还是铁轨惯例.
redirect_to(session[:return_to] || users_path)
Run Code Online (Sandbox Code Playgroud)
这可以防止redirect_to:在某些情况下导致错误.在c ++中,类似的东西意味着一个bool参数的函数.但在这里它似乎以另一种方式工作 - 我认为这个论点不是一个零.有人可以向我解释并显示这样一个函数的示例定义,它将参数分隔为'||'吗?
再见
布尔运算符,例如||并&&返回最后一次计算的语句.
一个例子,
puts "hi" && "no"
上面将打印"no",因为两个字符串都被认为是'truthy'而"no"是最后一个被调用的值.
在这种情况下,程序员正在利用||操作员的短路特性.另一个例子,
puts "hi" || "no"
以上将输出"hi",因为"hi"被认为是真实的或者被短路"hi"是从表达式调用的最后一个值并将被返回.
你会在ruby中看到这种构造很多,尤其是ifs.
a = if true
"A will be set to this string"
else
"This will never happen"
end
puts a #=> A will be set to this string
Run Code Online (Sandbox Code Playgroud)
编辑:尼克提到,需要注意的是不仅是重要的nil和false被称为"falsy"处理.一些有趣的例子
a = nil || "hi"
puts a #=> "hi"
a = false || "hi"
puts a #=> "hi"
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,第一个参数是"falsy",因此评估并返回"hi"(然后分配给a)
a = Object.new || "hi"
puts a #=> <Object:0x10832420>
Run Code Online (Sandbox Code Playgroud)
在这种情况下(对于作为第一个参数的任何其他值),Object.new是"true",因此永远不会评估"hi".在您的特定示例中,作者最有可能测试存在(而不是零)session[:return_to].这可能非常有用,但请始终记住,如果false它是有效值,它可能无法正常工作.