Na marginesie, jeśli jesteś w Railsach, możesz po prostu to zrobić'Smith'.first
Walking Wiki
Ruby 1.9+ ma"Smith".chr #=> "S"
Tyler James Young
Odpowiedzi:
128
Możesz użyć otwartych klas Rubiego, aby uczynić swój kod bardziej czytelnym. Na przykład to:
classStringdef initialself[0,1]endend
pozwoli ci użyć initialmetody na dowolnym łańcuchu. Więc jeśli masz następujące zmienne:
last_name ="Smith"
first_name ="John"
Wtedy możesz uzyskać bardzo wyraźne i czytelne inicjały:
puts first_name.initial # prints J
puts last_name.initial # prints S
Druga wspomniana tutaj metoda nie działa w Ruby 1.8 (nie żebyś i tak już używał 1.8! - ale kiedy opublikowano tę odpowiedź, była nadal dość powszechna):
puts 'Smith'[0]# prints 83
Oczywiście, jeśli nie robisz tego regularnie, zdefiniowanie metody może być przesadą i możesz to zrobić bezpośrednio:
zauważ, że działa to tylko w ruby19. w ruby18 "Smith"[0]zwróci wartość całkowitą znaku „S”. Obie wersje są posłuszne "Smith"[0,1] == "S".
rampion
@rampion: Jasne, ale w pytaniu nic nie wskazuje na to, że OP nie używa najnowszej wersji, więc po co komplikować sprawy?
Jörg W Mittag
4
Ruby 1.8 nie jest dziedzictwem! Linia Ruby 1.8 jest nadal obsługiwana i najprawdopodobniej zostanie wydana wersja 1.8.8. Co więcej, ani JRuby, ani Rubinius nie obsługują jeszcze 1.9. Postawiłbym 5 $, że jest dziś znacznie więcej użytkowników 1,8 niż 1,9.
Marc-André Lafortune
3
@ Jörg: Odpowiedź "Smith"[0,1]działa na 1.8 (zakładając ASCII). Nie jestem pewien, dlaczego zakładasz tak wiele o żądającym, a także o wszystkich innych, którzy chcieliby się czegoś nauczyć z tego pytania. Na przykład Mac OS X jest dostarczany w pakiecie z Ruby 1.8, więc nie jest wymagana instalacja dla tych użytkowników.
Marc-André Lafortune
3
Jak uzyskać inicjał nazwy „Ångström” (w UTF-8), aby działał zgodnie z oczekiwaniami zarówno w Rubim 1.8.x, jak i 1.9.x? Żadna z sugerowanych metod nie zadziała w 1.8.x.
zauważ, że działa to tylko w ruby19. w ruby18 "Smith"[0]zwróci wartość całkowitą znaku „S”. Obie wersje są posłuszne "Smith"[0,1] == "S".
rampion
1
@rampion: rzeczywiście. Dodam, że "Smith"[0] == ?Sto prawda na Ruby 1.8 i 1.9
Marc-André Lafortune
2
Z powodu irytującego wyboru projektu w Rubim przed wersją 1.9 - some_string[0]zwraca kod pierwszego znaku - najbardziej przenośnym sposobem zapisania tego jest some_string[0,1]polecenie pobrania podciągu o indeksie 0 o długości 1 znaku.
str [0,1] również nie działa tak samo w 1.8 i 1.9, ponieważ w pierwszym zwraca pierwszy bajt , aw drugim zwraca pierwszy znak .
Lars Haugseth
1
To nie jest tak naprawdę różnica w działaniu indeksowania, tak jak w przypadku obsługi języków wielobajtowych w wersji 1.9. Oba mają na celu zwrócenie pierwszej postaci, ale 1.8 ma bardziej naiwny pogląd na to, czym jest „postać”.
Żadna z tych metod nie zadziała .później name. A ostatnia nie jest sensowna, nawet jeśli usuniesz ., ponieważ używa dwóch różnych metod do zrobienia tego samego - [0]ichr() .
'Smith'.first
"Smith".chr #=> "S"
Odpowiedzi:
Możesz użyć otwartych klas Rubiego, aby uczynić swój kod bardziej czytelnym. Na przykład to:
pozwoli ci użyć
initial
metody na dowolnym łańcuchu. Więc jeśli masz następujące zmienne:Wtedy możesz uzyskać bardzo wyraźne i czytelne inicjały:
Druga wspomniana tutaj metoda nie działa w Ruby 1.8 (nie żebyś i tak już używał 1.8! - ale kiedy opublikowano tę odpowiedź, była nadal dość powszechna):
Oczywiście, jeśli nie robisz tego regularnie, zdefiniowanie metody może być przesadą i możesz to zrobić bezpośrednio:
źródło
Jeśli używasz najnowszej wersji Rubiego (1.9.0 lub nowszej), powinny działać następujące elementy:
Jeśli używasz wersji 1.9.0+ lub 1.8.7, poniższe powinny działać:
Jeśli używasz wersji starszej niż 1.8.7, powinno to działać:
Zauważ, że
'Smith'[0,1]
nie nie działa na 1.8, to będzie nie daje pierwszy znak, to tylko daje pierwszy bajt .źródło
"Smith"[0]
zwróci wartość całkowitą znaku „S”. Obie wersje są posłuszne"Smith"[0,1] == "S"
."Smith"[0,1]
działa na 1.8 (zakładając ASCII). Nie jestem pewien, dlaczego zakładasz tak wiele o żądającym, a także o wszystkich innych, którzy chcieliby się czegoś nauczyć z tego pytania. Na przykład Mac OS X jest dostarczany w pakiecie z Ruby 1.8, więc nie jest wymagana instalacja dla tych użytkowników.działa zarówno w Ruby 1.8 jak i Ruby 1.9.
źródło
Ze względu na kompletność, ponieważ Ruby 1.9 String # chr zwraca pierwszy znak łańcucha. Jest nadal dostępny w wersjach 2.0 i 2.1.
http://ruby-doc.org/core-1.9.3/String.html#method-i-chr
źródło
W MRI 1.8.7 lub nowszym:
źródło
W Railsach
źródło
Spróbuj tego:
LUB
źródło
źródło
"Smith"[0]
zwróci wartość całkowitą znaku „S”. Obie wersje są posłuszne"Smith"[0,1] == "S"
."Smith"[0] == ?S
to prawda na Ruby 1.8 i 1.9Z powodu irytującego wyboru projektu w Rubim przed wersją 1.9 -
some_string[0]
zwraca kod pierwszego znaku - najbardziej przenośnym sposobem zapisania tego jestsome_string[0,1]
polecenie pobrania podciągu o indeksie 0 o długości 1 znaku.źródło
Inna opcja, o której jeszcze nie wspomniano:
źródło
Możesz także użyć
truncate
lub do dodatkowego formatowania:
źródło
Każda z tych metod będzie działać:
źródło
.
późniejname
. A ostatnia nie jest sensowna, nawet jeśli usuniesz.
, ponieważ używa dwóch różnych metod do zrobienia tego samego -[0]
ichr()
.