【问题标题】:Using regex in Ruby if condition如果条件在 Ruby 中使用正则表达式
【发布时间】: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


【解决方案1】:
if params[:test] =~ /foo/
    # Successful match
else
    # Match attempt failed
end

为我工作。调试params[:test]中的内容

【讨论】:

  • 嗨@michael,你能解释一下“=~”的作用和其他用途吗?这对我来说是新的,只是有点想了解一下。
  • @RogerPerez 请参阅this 问题或docs link 提及。
猜你喜欢
  • 2020-10-24
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2015-05-29
  • 2011-10-30
相关资源
最近更新 更多