Ruby一行if return语句

Kok*_*zzu 8 ruby refactoring return

有没有办法在Ruby上缩短这一行?

if (res = bla_permission_invalid).is_a? String then return res end
Run Code Online (Sandbox Code Playgroud)

def something # many things that like this
  if (res = bla_permission_invalid).is_a? String then return res end
  # do something else
  return true
end
Run Code Online (Sandbox Code Playgroud)

当bla_permission_invalid的内容类似的时候

def bla_permission_invalid
  return invalid_address_report_func if invalid_address?
  return permission_error_report_func if @user.not_one_of? [ :group1, :group2 ]
  return nil
end
Run Code Online (Sandbox Code Playgroud)

invalid_adress_report_funcpermission_error_report_func返回字符串

Ser*_*sev 7

如果可能的值为Stringand NilClass,则代码可以简化为:

def something
  res = bla_permission_invalid()
  return res if res # strings are truthy, so they'll be returned but nil will proceed

  # do something else
  true
end
Run Code Online (Sandbox Code Playgroud)


tih*_*hom 5

def something
  bla_permission_invalid || (
  # do something else
  true)
end
Run Code Online (Sandbox Code Playgroud)