Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rubyonrails中的动态条件_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails rubyonrails中的动态条件

Ruby on rails rubyonrails中的动态条件,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,ruby-on-rails-3.2,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|

我有以下情况:

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

在这里,您的思路是正确的,但是您有一种非常独特的编码风格。首先要指出的是,像
==
这样的比较已经返回一个布尔值
true
false
,没有理由使用
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/
你可以对这类东西进行测试以使其正确。这里的
[0-5]
表示该范围内的任何内容。这是你所拥有的东西的简写

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

"FIX_STRING 3,4,D".match(PATTERN)
# => #<MatchData "FIX_STRING 3,4,D">
“固定字符串3,4,D”。匹配(模式)
# => #
所以这是匹配的


较新版本的Ruby有一个
match?
方法,该方法只测试匹配项,而不返回匹配项,如果在2.3或更高版本上运行,您可能希望使用该方法。它比普通的
match
方法要快,不过只有在循环中进行大量匹配时,这才真正重要。

真的不清楚您在这里要做什么。也许用简单的英语描述你的目标会更好。你在找这样的正则表达式吗:
如果“FIX_STRING 0,0,DYNAMIC_STRING”。匹配(/FIX_STRING[0-5],[0-5],[a-Z_]+/)然后选择true或false结束
?它是否必须只匹配从A到D的整个动态_字符串或大写字符?请更准确地提问。Ruby 2.4将引入
Regexp#match?
,它返回
true
false
,并且不设置全局变量。但是
match?
在2.3中不可用,我认为在2.4中没有
字符串#match?