判断哪个方法 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
,您不想计算第二个表达式,因为在某些情况下可能会引发异常(例如除以零), 具有不良副作用(例如,删除所需的文件)或启动冗长的计算。
我有:
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
,您不想计算第二个表达式,因为在某些情况下可能会引发异常(例如除以零), 具有不良副作用(例如,删除所需的文件)或启动冗长的计算。