Ruby代码翻译请求

时间:2009-07-15 09:51:55

标签: ruby pseudocode

我的Ruby语法知识可以忽略不计,并且希望有人能够将下面的函数转换为伪代码,并可能提供一个如何调用它的示例?

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end

1 个答案:

答案 0 :(得分:12)

哇。那是一些丑陋的红宝石。

所以num这里实际上是String(提示是使用#sub#=~方法。

list是<{p}}的Array

  • Regexp个对象和/或
  • 成对Regexp和替换String个对象。

如果给定的Regexp没有匹配字符串,则该方法返回nil

如果未配对的Regexp与字符串匹配,则该方法返回Regexp

如果配对Regexp与字符串匹配,则该方法替换字符串的一部分 Regexp与配对的替换文本匹配,并返回修改后的String

一旦Regexp与字符串匹配,该方法将返回 - 不再考虑Regexp

在任何情况下都不会修改原始String

这真的是一种非常方法,恕我直言,因为它试图做很多不同的事情。

示例电话:

 in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
 in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
 in_list("abe lincoln", [ [/link/] ]) #=> nil

真的,有了这么多的回归类型,它似乎更像是屁股上的痛苦而不是它的价值。

在伪代码中

  DEF IN-LIST( text, regexps )
    FOREACH regexp IN regexps
      IF HAS-MATCH( text, regexp )
        IF HAS-REPLACEMENT-TEXT( regexp )
          RETURN REPLACE-MATCHED-PORTION( text, regexp, GET-REPLACEMENT-TEXT(regexp) )
        ELSE
          RETURN regexp
        ENDIF
      ENDIF
    ENDFOREACH
    RETURN NOTHING-FOUND
  ENDDEF

但就像我说的那样,这是一些丑陋的红宝石。我会避免使用它。这是一个代码,它告诉我这段代码有很多错误。

如果我有一个Regexps数组,并希望找到第一个匹配某些文本的数组,我会这样做:

# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/

如果我有一个Regexp的集合,替换文本对,我想在某些文本中替换第一个匹配,我会这样做

# general case
text_dupe = text.dup
pairs.find { |re,replace| text_dupe.sub!( re, replace ) }
# example
text_dupe = "One two three four".dup
[ [/ape/, 'frog'], [/our/, 'my'] ].find { |re,replace| text_dupe.sub!( re, replace } } # would return "One two three fmy"

我宁愿最后使用Hash,但由于失去了订单,原始列表就进来了(我该说谁 这不重要,不知道它是如何使用的,我没有。