确定哪个方法在或运算符中返回true

时间:2016-03-02 12:47:01

标签: ruby return return-value

我有:

def user_validation
  first_user_valid? || second_user_valid?
end

我不仅要返回true / false,还要返回哪个方法返回true(可能两者都有?)。我有:

def user_validation
  return true if first_user_valid?
  return true if second_user_valid?
end
到目前为止。但这对我来说似乎不太直观。

由于

5 个答案:

答案 0 :(得分:2)

您可以返回一系列回复:

def user_validation
  [first_user_valid?, second_user_valid?]
end

通过这种方式,您可以知道第一个返回true,另一个false ...

# => [true, false]

答案 1 :(得分:0)

如果我是你,我将返回值从布尔值更改为int。这样做,您可以处理哪个参数返回特定数字。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

出于好奇:

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

这里的结果可能是nilfalsey),也可能是字符串:

"first user valid, second user valid"

答案 4 :(得分:0)

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,则不希望评估第二个表达式,因为在某些情况下可能引发异常(例如除以零),有不良副作用(例如,删除所需文件)或启动冗长的计算。