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 是 true
或 false
的布尔值,没有理由 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
方法更快,尽管只有当您在循环内进行大量匹配时才真正重要。
我有以下情况:
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 是 true
或 false
的布尔值,没有理由 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
方法更快,尽管只有当您在循环内进行大量匹配时才真正重要。