【发布时间】:2011-04-14 20:14:32
【问题描述】:
开发一个小型调查 web 应用程序时遇到了处理评级类型问题范围的问题。 所以评分的范围可能是:
1..10
-5..0
-5..5
'a'..'z'
'E'..'M'
等等
范围在数据库中存储为一对 varchars(范围的开始和结束)。所以 range 总是以字符串输入开始。
获取这些字符串值并相应地构建 Ruby Range 的最佳方法是什么。 我不能只去 value.to_i 因为这不适用于字符串迭代。拥有一堆 if 似乎很难看。有更好的方法吗?
不那么重要,但值得一问: 另外,如果我想让它在反向范围内工作怎么办?说 5 对 0 或 G 对 A。我知道 Ruby 不支持反向范围(因为它使用 succ() 进行迭代)。这里最好的方法是什么?
提前致谢!
更新:
根据 Wouter de Bie 的建议,我决定这样做:
def to_int_or_string(str)
return str.match(/^-?\d+$/) ? str.to_i : str.strip
end
def ratings_array(from, to)
from = to_int_or_string(from)
to = to_int_or_string(to)
from > to ? Range.new(to, from).to_a.reverse : Range.new(from, to).to_a
end
有什么想法吗?
【问题讨论】: