2009-07-15 13 views
0

私はRubyの構文知識がほとんどなく、以下の関数を擬似コードに変換して、それがどのように呼び出されるかの例を提供するのに十分親切であることを望んでいましたか?Rubyコード変換リクエスト

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

このコードがどのような引数で呼び出されているのでしょうか?私はそれを理解することに亀裂があったが、私はかなり混乱している。元の意図を理解するには、あまりにも賢いか、あまりにも愚かです。 – tomafro

+0

それはあまりにも愚かです。良いコードはコメントであり、意味のある変数名を使用していますが、多くの点でこのコードではありません。 – rampion

答えて

12

ワウ。それはいくつかの醜いルビーです。ここで

だからnum実際String(チップオフは#sub#=~方法の使用されている。

list

  • Regexpオブジェクトおよび/または
  • 対のArrayありますRegexpおよび代替品Stringオブジェクト。

Regexpのいずれも文字列と一致しない場合、このメソッドはnilを返します。

対応していないRegexpが文字列と一致する場合、このメソッドはRegexpを返します。

ペアRegexp一致文字列の場合、この方法は、対になった置換テキストとRegexpマッチする文字列 の一部を置換、および改変Stringを返します。

Regexpが文字列と一致すると、メソッドは返されます - 後でRegexpが考慮されます。

オリジナルはありません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)) 
     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の収集、置換テキストのペア、およびIを持っていた場合いくつかのテキストの最初の試合を交換したかった、私は私ではなく、実際に最後のためHashを使用したい、この

# 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" 

を行うだろうが、それは順序を失うので、元のリストには入って来た(と誰が私はto say 重要ではない、使用方法を知らない)、私はしませんでした。

+0

あなたの投稿時に回答を書いている途中でした。私はregexpのマッチングと同じ結論に戻ってきました。それは何となく醜いことに同意します。 – tomafro

関連する問題