我的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和#=~方法.
list是Array的
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 ,但是由于失去了原始列表的顺序(我应该说那不重要,不知道它是如何使用的),我没有.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |