Yakut Kod Çeviri İsteği

oy
0

Ben önemsiz Yakut sözdizimi bilgisine sahip ve birisi nezaketinde sözde koduna aşağıdaki işlevi çevirmek ve muhtemelen o çağrılacak nasıl kullanıldığını açıklayan bir örnek teşkil etmek olacağını umuyordum?

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end
Oluştur 15/07/2009 saat 10:51
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
12

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).

Cevap 15/07/2009 saat 12:03
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more