2016-03-02 57 views
-2

返回true我:确定性哪种方法或操作

def user_validation 
    first_user_valid? || second_user_valid? 
end 

,我不只想返回true/false,但也想返回方法返回真(也许两者兼而有之?)。我确实有:

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

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

感谢

+1

您对每种情况(四种)的预期回报值是多少? – sawa

回答

2

您可以返回的响应数组:

def user_validation 
    [first_user_valid?, second_user_valid?] 
end 

这样你就可以知道,第一个返回true,其他false ...

# => [true, false] 
+0

假设'@x = 0:def first_user_valid ?; @x == 0;结束; def second_user_valid?; (10%@x)== 2; end'? –

0

如果我是你,我改变从布尔返回到int。这样做,你可以处理哪些陈述返回具体的数字。

+1

我会避免硬编码状态的整数。创建难以维护的代码。 – Sterex

+0

返回true/false的数组并不是一个好的实践。如果你用状态码指定一个列表,它应该是一个很好的实现。 –

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