Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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 if语句_Ruby_Regex_String_Methods_Match - Fatal编程技术网

组合两个非常相似的ruby if语句

组合两个非常相似的ruby if语句,ruby,regex,string,methods,match,Ruby,Regex,String,Methods,Match,现在,我正在一个文本字符串中查找匹配项: if w.include? 'syn' w.sub!(/.*?syn\|/, '') return w unless similar?(word, w) elsif w.include? 'sim' w.sub!(/.*?sim\|/, '') return w unless similar?(word, w) end 但我希望能够将它们结合起来,就像我在另一个小程序中所做的那样(这只是其中的一个片段): def plu

现在,我正在一个文本字符串中查找匹配项:

if w.include? 'syn'
    w.sub!(/.*?syn\|/, '')
    return w unless similar?(word, w)
elsif w.include? 'sim'
    w.sub!(/.*?sim\|/, '')
    return w unless similar?(word, w)
end
但我希望能够将它们结合起来,就像我在另一个小程序中所做的那样(这只是其中的一个片段):

def plus
self.meta_reduce(:+)
结束
减def
self.meta_reduce(:-)
结束
def时间
自浮
self.meta_reduce(:*)
结束
def分配
自浮
self.meta_reduce(:/)
结束
def使_浮动参数=零
如果参数为,则将参数返回到\u f
@value=@value.map{| n | n.to_f}
结束
def meta_reduce操作=:sym
如果@value.length<2
提高“计算器为空”
结束
@value=self.push(@value.pop(2.reduce)(操作))
结束
我知道在我的数学例子中,方法的不同在于所应用的运算,而在另一个例子中,不同在于所匹配的运算。有没有一种优雅的方法可以通过输入子字符串来动态创建新方法?

这个怎么样

%w[syn sim].each do |str|
  if w.include? str
    w.sub!(/.*?#{str}\|/, '')
    return w unless similar?(word, w)
  end
end

如果您意识到
string.sub!(/xxx/,“”)
将不执行任何操作,如果
string
不包含
xxx
,则返回
nil
。这样你就可以写作了

if w.sub!(/.*?syn\|/, '') or w.sub!(/.*?sim\|/, '')
  return w unless similar?(word, w)
end

你到底是什么意思?我不明白你想做什么。我想当他说联合时,他真的是指重构是的,我指的是重构。
if w.sub!(/.*?syn\|/, '') or w.sub!(/.*?sim\|/, '')
  return w unless similar?(word, w)
end