Ruby停止迭代在case块如果返回true



下面有if block:

scoring = if match_invoice_number(resource)
3
elsif match_amount(resource) && match_vendor(resource)
2
elsif match_vendor(resource)
1
else
0
end

我用下面的大小写替换

def score(resource)
case resource
when match_invoice_number(resource) then 0
when match_amount(resource) && match_vendor(resource) then 1
when match_vendor(resource) then 3
else -1
end
end

我认为当某些when元素返回true时会打破这个循环。例如,如果case中断并返回1,match_amount(resource) && match_vendor(resource)将返回true。如何做到这一点?

case resourceruby比较您的资源与使用===的每个表达式。看起来,match...方法返回布尔值,因此您将始终获得默认值。

要做到这一点,你可以摆脱资源。如果为空,您将得到预期的行为。

def score(resource)
case
when match_invoice_number(resource) then 0
when match_amount(resource) && match_vendor(resource) then 1
when match_vendor(resource) then 3
else -1
end
end

然而,使用空的case并不是一个好的做法。If-else是更好地解决这个任务的工具。

def score(resource)
if match_invoice_number(resource)
3
elsif match_amount(resource) && match_vendor(resource)
2
elsif match_vendor(resource)
1
else
0
end
end

相关内容

最新更新