轨道上红宝石的动态条件

时间:2016-11-04 07:03:16

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

我有以下条件:

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

1 个答案:

答案 0 :(得分:2)

你在这里走的正确,但你有一种非常特殊的编码风格。首先要指出的是, str = "Google mail, Google Maps, Google drive, Google music, Google play, Google office" str1 = Split(replace(str,",","")," ") Set dic1 = CreateObject("Scripting.Dictionary") On Error Resume next For Each a in str1 dic1.Add a,"1" If Err.Number <> 0 Then dic1(a) = cstr(cint(dic1(a)) + 1) err.clear End If Next On Error Goto 0 repeatedwords = "" For each keys in dic1 If cint(dic1(keys)) > 1 Then repeatedwords = repeatedwords & vbNewline & vbNewline & keys & " repeated " & dic1(keys) & " times" End If Next msgbox repeatedwords Set dic1 = nothing 之类的比较已经返回了布尔值==truefalse没有理由返回完全相同的if的事情。

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

"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?方法只测试匹配,它不会返回匹配的内容,如果您在2.3或更高版本上运行,可能需要使用它。它比普通的match方法更快,但只有在循环内部进行大量匹配才真正重要。