私はRuby構文の知識がほとんどなく、誰かが以下の関数を擬似コードに変換し、それがどのように呼び出されるかの例を提供してくれることを望んでいましたか?
def in_list(num, list)
list = [*list]
list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a}
nil
end
私はRuby構文の知識がほとんどなく、誰かが以下の関数を擬似コードに変換し、それがどのように呼び出されるかの例を提供してくれることを望んでいましたか?
def in_list(num, list)
list = [*list]
list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a}
nil
end
わお。それは醜いルビーです。
だからnum
ここに実際にありますString
(ヒントは#sub
と#=~
メソッドの使用です。
list
Array
の_
Regexp
オブジェクトおよび/またはRegexp
と置換String
オブジェクトのペア。指定されたのいずれもRegexp
文字列と一致しない場合、メソッドはを返しますnil
。
対になっていないRegexp
文字列が一致する場合、メソッドはそれを返しますRegexp
。
ペアRegexp
が文字列と一致する場合、メソッドはRegexp
、ペアの置換テキストと一致する文字列の部分を置換し、変更されたを返しますString
。
が文字列とRegexp
一致すると、メソッドは戻ります-それ以降Regexp
のsは考慮されません。
いかなる場合でも、オリジナルはString
変更されません。
それは非常に異なることをしようとしているので、それは本当にフランケンメソッド、IMHOです。
呼び出し例:
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)) そうしないと 正規表現を返す ENDIF ENDIF ENDFOREACH 何も返さない-見つかった 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
実際には最後にaを使用したいのですが、元のリストが入っていた順序が失われるため(そして、それがどのように使用されているかわからないので、それは重要ではないと私は言います)、私はしませんでした。