rails ruby 中的动态条件

Dynamic condition in ruby on rails

我有以下情况:

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{integer_from_0_to_5},#{integer_from_0_to_5},#{DYNAMIC_STRING}"
  true
else
  false
end

如何让它动态地变成这样?

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{/0|1|2|3|4|5/},#{/0|1|2|3|4|5/},#{/A|B|C|D/}"
  true
else
  false
end

您的方向是正确的,但是您的编码风格非常奇特。首先要指出的是,像 == 这样的比较已经 return 是 truefalse 的布尔值,没有理由 if 然后return完全一样。

第二件事是您要将一个字符串与另一个字符串进行比较,因此它们必须完全匹配。足够接近不算数。如果你评估你的其他字符串,你会变得一团糟:

"FIX_STRING (?-mix:0|1|2|3|4|5),(?-mix:0|1|2|3|4|5),(?-mix:A|B|C|D)" 

最后,如果您尝试测试字符串与正则表达式,您可以这样做:

PATTERN = /\AFIX_STRING [0-5],[0-5],[A-D]\z/

您可以在 Rubular 上测试此类内容以确保正确。这里 [0-5] 表示该范围内的任何值。它是您所拥有内容的简写。

然后您可以根据此模式测试任意字符串:

"FIX_STRING 3,4,D".match(PATTERN)
# => #<MatchData "FIX_STRING 3,4,D">

所以匹配。

较新版本的 Ruby 有一个 match? 方法只测试匹配,它不 return 匹配什么,如果你是运行 2.3 或更高版本。它比普通的 match 方法更快,尽管只有当您在循环内进行大量匹配时才真正重要。