我有验证方法,它返回true
/ false
的两个元素数组和一个字符串。一个例子是:
def check_length(name)
if(name.length > 50)
return false, "Length more than 50"
else
return true, ""
end
end
我正在尝试检查此类的多种方法。我编写了如下代码:
def validate
value, message =
check_length(name) &&
is_valid(id) &&
is_any_mismatch(name,id) &&
is_valid(name) &&
...
end
我希望value
获取true
/ false
和message
字符串值。如果check_length
返回false
,则不应评估第二种方法is_valid
。
但是对于上面的代码,即使check_length
返回false
,也会评估is_valid
,value
会被is_valid
的返回值覆盖。
如果第一个条件为false
并从validate
函数返回,我们如何中断执行?即短路评估应使用两个返回值。
答案 0 :(得分:0)
返回值是一个数组,所以它永远不会是假的(即使它的第一个元素是false
)。这意味着你必须使用析取而不是连接来构造逻辑。检测到的错误将返回一个数组(即真值),缺少错误将是nil
。最后,您返回一个具有true
的默认数组。
def check_length(name)
if(name.length > 50)
return false, "Length more than 50"
else
return nil
end
end
def validate
check_length(name) ||
is_valid(id) ||
is_any_mismatch(name,id) ||
is_valid(name) ||
... ||
[true, ""]
end
这将返回一个双元素数组,其中true
/ false
作为第一个元素,消息作为第二个元素。