【发布时间】:2012-03-25 16:02:52
【问题描述】:
我正在尝试在 Ruby (1.9.2) if 语句中使用正则表达式作为条件,但即使正则表达式的计算结果为 nil,它也会继续返回 true
if (params[:test] =~ /foo/)
return "match"
else
return "no match"
end
即使Rails.logger.info(params[:test]) 显示测试设置为"bar",上述内容也会返回“匹配”
【问题讨论】:
-
我无法重现这一点(也不应该发生)。可能你认为
params[:test] == "bar"是错误的。 -
我刚刚在 irb 命令行中检查过,无法重现您的情况。
"bar" =~ /foo/返回零。您的问题在其他地方... -
我有 Rails.logger.info(params[:test]) if 语句上方的行,它输出“bar”
-
@Exupery:试试
Rails.logger.info(params[:test].class)。不可能是params[:text] == "bar",否则你的 Ruby 是错误的,这似乎不太可能。可以用 pry 来查看if之前的当前执行索引吗?这将使您能够比日志语句更好地调试params[:test]的当前值(并且您可以交互地尝试正则表达式匹配)。 -
经过进一步测试,似乎只有在第一次调用该方法时才能正确评估条件。无论“测试”变成什么,后续调用都会返回相同的值。显然,我需要尝试确定导致 Rails 使用缓存值的原因。感谢大家的帮助。
标签: ruby-on-rails ruby