Ruby代码翻译请求

sip*_*wiz 0 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
Run Code Online (Sandbox Code Playgroud)

ram*_*ion 12

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

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

listArray

  • Regexp 对象和/或
  • 成对Regexp和替换String对象.

如果给定的Regexps 都不匹配字符串,则该方法返回nil.

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

如果配对Regexp匹配字符串,则该方法将匹配的字符串部分Regexp替换为配对的替换文本,并返回已修改的字符串String.

一旦Regexp匹配字符串,该方法返回 - 不Regexp考虑以后的s.

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

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

一个示例电话:

 in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
 in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
 in_list("abe lincoln", [ [/link/] ]) #=> nil
Run Code Online (Sandbox Code Playgroud)

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

在伪代码中

  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/
Run Code Online (Sandbox Code Playgroud)

如果我有一组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"
Run Code Online (Sandbox Code Playgroud)

我宁愿Hash最后使用a ,但是由于失去了原始列表的顺序(我应该说那不重要,不知道它是如何使用的),我没有.