Vay. Yani bazı çirkin yakut bu.
Yani numburada aslında bir olduğunu Stringkullanılması olma (uç off #subve #=~yöntemlerle.
listBir olduğu Arraybir
Regexp nesneler ve / veya
- çiftleri
Regexpve değiştirme Stringnesneleri.
Verilen hiçbiri değilse Regexps dize, metot bize maç nil.
Bir eşleşmemiş ise Regexpdizeyle eşleşir, yöntem döndürür Regexp.
Bir eşleştirilmiş ise Regexpdizeyle eşleşir, yöntem dizesinin bölümünü yerine Regexpeşleştirilmiş yedek metin ile kibrit ve döner modifiye String.
Bir kez Regexpdizeyle eşleşir, yöntem döndürür - en geç Regexpler olarak kabul edilir.
Hiçbir durumda orijinal Stringgüncellenmiştir.
Çok farklı şeyler yapmaya çalışıyor, çünkü gerçekten bir Franken-yöntem, IMHO bu.
Bir örnek çağrı:
in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
in_list("abe lincoln", [ [/link/] ]) #=> nil
Gerçekten, dönüş tiplerinin bu sayıda, buna değer daha kıçından bir ağrı daha fazla gibi görünüyor.
yalancı kod
DEF IN - LİSTESİ ( metin , regexpleri )
ForEach regexp İÇİNDE regexp'ler
EĞER HAS-MAÇ ( metin , regexp )
IF -DEĞİŞTİRME-METİN HAS ( regexp )
DÖNÜŞ DEĞİŞTİRİN-MATCHED-KISMINI ( metin , regexp'in , GET-DEĞİŞTİRME-METİN ( regexp ))
BAŞKA
DÖNÜŞ regexp
ENDIF
ENDIF
endforeach
DÖNÜŞ HİÇBİR-BULUNDU
ENDDEF
Ama dediğim gibi, bu da çirkin yakut olduğunu. Ben bunu kullanarak önleyeceğini. Bu kod ile yanlış bir sürü var bana söyler bir codesmell bu.
Ben bir dizi olsaydı Regexpsve bazı metin eşleşen ilk olanı bulmak istedim yapardım:
# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/
Ben bir koleksiyon olsaydı Regexpdeğiştirme metni çiftleri, ve bazı metinde ilk maçında yerini istedi, ben bu yapardım
# 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"
Daha doğrusu bir kullanırım Hashaslında en sona, ama bu orijinal liste geldi sırasını kaybeder beri, bilmiyordum (ve kimim ben değil nasıl kullanıldıklarını bilmek, önemli değil demek).