[ruby-de] String-Bearbeitung, gsub

Norbert Melzer timmelzer at gmail.com
Mi Aug 30 19:29:42 JST 2017


Wolfgang Nádasi-Donner <ruby at wonado.de> schrieb am Mi., 30. Aug. 2017 um
12:08 Uhr:

> Am 30.08.2017 um 02:04 schrieb Die Optimisten:
> > Hallo
> >
> > "ab/cd".gsub( /\/(.)/,  "\\1".upcase)        # => "Abcd"
> > # auf das wesentliche komprimiert
> > Warum wird das .upcase nicht ausgeführt?, wie tut man das (gehts auch
> > ohne Block)?
> >
> > danke
> > Andreas
> >
> >
>
> btw: Du meintest wohl "abCd" als erwartetes Ergebnis
>

Wo siehst du ein erwartetes Ergebnis? Ich sehe per Konvention lediglich
einen Marker für „das hab ich bekommen“ und das stimmt nicht einma, denn er
bekommt lediglich `"abcd"` zurück.


> Ooops!? - Kann das bestätigen, was mich arg erstaunte. Ein paar
> Experimente zeigten mir, dass die erkannte Gruppe offensichtlich zu
> einem "seltsamen" Zeitpunkt eingefügt wird...
>

Aufgerufen wird `#upcase` auf den String `"\\1"`, da ist nichts zum
upcasen, weder für `\` noch für `1` gibt es eine „große“ Variante.


> $ irb
> irb(main):001:0> "ab/cd".gsub( /\/(.)/,  "\\1".upcase)
> => "abcd"
> irb(main):002:0> "ab/cd".gsub( /\/(.)/,  '\1'.upcase)
> => "abcd"
> irb(main):003:0> "ab/cd".gsub( /\/(.)/,  '\1\1'.upcase)
> => "abccd"
> irb(main):004:0> "ab/cd".gsub( /\/(.)/,  '\1otto\1'.upcase)
> => "abcOTTOcd"
> irb(main):005:0> "ab/cd".gsub( /\/(.)/){$1.upcase}
> => "abCd"
>
> Ich sehe auf die Schnelle auch nur die Lösung mit Block (letzte Zeile),
> aber die ist Golf-technisch gesehen sogar kürzer ;-)
>

Ist denn Versuch Nummer "5" tatsächlich das gewünschte Ergebnis? Ist
vielleicht `"abCD"` das gewünschte Ergebnis? Oder doch etwas ganz anderes?
Oder vielleicht doch das ursprünglich gezeigte `"Abcd"`? Solange wir das
nicht wissen, sollten wir nicht mehr groß Zeit in dieses „Problem“ stecken.

Viele Grüsse, WoNáDo
>

Grüße aus dem noch sonnigen Norden,
  Norbert


Mehr Informationen über die Mailingliste ruby-de