判断哪个方法 returns true in or operator

Determinate which method returns true in or operator

我有:

def user_validation
  first_user_valid? || second_user_valid?
end

而且我不仅想要 return true/false,还想 return 哪种方法 return 是正确的(也许两者都是?)。我有:

def user_validation
  return true if first_user_valid?
  return true if second_user_valid?
end

到目前为止。但这对我来说似乎不是很直观。

谢谢

您可以 return 一组响应:

def user_validation
  [first_user_valid?, second_user_valid?]
end

这样你就可以知道第一个return编辑了true,另一个false...

# => [true, false]

如果我是你,我会将 return 从布尔值更改为整数。这样做,您可以处理哪个声明 returning 具体数字。

为什么不为不同的用户单独调用方法本身?

def user_validation(user)
    return user_valid?
end

if(user_validation(user_1))
    //user_1 is valid
end

if(user_validation(user_2))
    //user_2 is valid
end

出于好奇:

result = %w|first_user_valid second_user_valid|.inject(nil) |memo, m|
  (memo ||= []) << m.tr('_', ' ') if public_send("#{m}?")
  memo
end

if result # at least one is valid
  puts result.join ', '
else      # none is valid
  puts 'None is valid :('
end

这里的结果可能是 nil (falsey),或者像这样的字符串:

"first user valid, second user valid"
def user_validation
  valid = ((which = :first) && first_user_valid?) || 
   ((which = :second) && second_user_valid?)
  which = :neither unless valid
  [valid, which]
end

举例说明:

def first_user_valid?;  true; end
def second_user_valid?; true; end
user_validation #=> [true, :first]

def first_user_valid?;  false; end
user_validation #=> [true, :second]

def second_user_valid?; false; end
user_validation #=> [false, :neither]

一般来说,当使用 || 时,如果第一个表达式计算 true,您不想计算第二个表达式,因为在某些情况下可能会引发异常(例如除以零), 具有不良副作用(例如,删除所需的文件)或启动冗长的计算。