Ruby - 除非值为真,否则返回假,在这种情况下返回值

Spi*_*ion 5 ruby return conditional-statements

如果a = false并且b = 2是否有一种简洁的方法来实现这一点?使用只return a unless b返回 '​​nil' 而不是 '2'。

我有

def checkit
  return a unless b
  b
end
Run Code Online (Sandbox Code Playgroud)

这个语句会调用 b 两次吗?

一个真实的案例是:

def current_user
  @current_user ||= authenticate_user
end

def authenticate_user
    head :unauthorized unless authenticate_from_cookie 
end

def authenticate_from_cookie
  .
  if user && secure_compare(user.cookie, cookie)
    return user
  else
    return nil
  end
end
Run Code Online (Sandbox Code Playgroud)

Dan*_*ers 2

我不知道你为什么存储false在变量中a,所以我省略了。据我了解,您想要将一个值传递给 method checkit,如果其布尔值是true(这意味着除了 valuenil和之外的所有内容false),该方法应该返回该值,否则返回该值。在这种情况下,只需使用这个:

def checkit(value)
  value || false
end

checkit(1)       # => 1
checkit(false)   # => false
checkit('value') # => "value"
checkit(nil)     # => false
Run Code Online (Sandbox Code Playgroud)