我有:
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
到目前为止。但这对我来说似乎不太直观。
由于
答案 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
这里的结果可能是nil
(falsey
),也可能是字符串:
"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
,则不希望评估第二个表达式,因为在某些情况下可能引发异常(例如除以零),有不良副作用(例如,删除所需文件)或启动冗长的计算。