下面有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 resource
ruby比较您的资源与使用===
的每个表达式。看起来,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