2010-04-25 2 views
5

Jestem nowy dla Ruby i pracuję nad "Humble Little Ruby Guide" pana Neighborly. Po drodze pojawiło się kilka literówek, ale zawsze udało mi się ustalić, co jest nie tak, a następnie je naprawić - aż do teraz!Metoda usuwania Ruby (manipulowanie ciągami znaków)

Jest to bardzo proste, ale nie mogę się następujący przykład do pracy w systemie Mac OS X (Snow Leopard):

gone = "Got gone fool!" 
puts "Original: " + gone 
gone.delete!("o", "r-v") 
puts "deleted: " + gone 

Wyjście Czekam wynosi:

Original: Got gone fool! 
deleted: G gne fl! 

Wyjście, które otrzymuję, to:

Original: Got gone fool! 
deleted: Got gone fool! 

Usuń! metoda nie wydaje się mieć żadnego wpływu.

Czy ktoś może rzucić światło na to, co dzieje się tutaj? : - \

Odpowiedz

9

String.delete Sposób (Documented here) traktuje argumenty jako tablice a następnie usuwa postacie oparte na przecięcia swoich układach.

Przecięcie 2 tablic to wszystkie znaki wspólne dla obu tablic. Tak oryginalny usuwać z gone.delete!("o", "r-v") staną

gone.delete ['o'] & ['r','s','t','u','v'] 

Brak znaków występujących w obu tablicach więc usunięcie dostanie pustą tablicę, stąd żadne znaki zostaną usunięte.

+0

Kolejna literówka skreślona do przykładów z tej książki. ;-) Wielkie dzięki za wyjaśnienie. – Brian

1

dostać samą O/P korzystając jakiś inny sposób jak gsub

puts "deleted: " + gone.gsub('o', '') 

O/P

deleted: Got gone fool! 
+0

Dziwne, prawda? Czy ty też korzystasz z MAC OS X? – Brian

2

Zmieniłem

gone.delete!("o", "r-v") 

do

gone.delete!("or-v") 

i działa dobrze.

+0

Wielkie dzięki! Próbowałem prawie wszystko poza tym! Ciekawe, czy jesteś też na MAC OS X? – Brian

+0

Nie. Używam ruby ​​na Windows i Linuksie. Większość ruby ​​powinna być niezależna od systemu operacyjnego, więc wszelkie początkowe problemy, które napotykasz, nie powinny być specyficzne dla OS X. –

+0

Staraj się rozszerzyć używając podwójnych cytatów: http://stackoverflow.com/a/4190812/1729094 – yPhil