2013-02-13 12 views
30

Zastanawiasz się, czy istnieje idiom Ruby do wyodrębniania podciągu z indeksu do końca łańcucha. Wiem o str[index..-1], która działa poprzez przekazywanie obiektu zakresu do metody String 's [], ale jest trochę niezgrabny. W pythonie można na przykład napisać str[index:], który niejawnie dostarczyłby resztę ciągu znaków.Idiomy ruby ​​dla podciągu od indeksu do końca łańcucha

Przykład:

s = "hello world" 
s[6..-1] # <-- "world" 

Czy jest coś przyjemniejszego niż s[6..-1]?

+0

myślę explicity jest ładniejszy niż implicity w tej sprawie. – Flauwekeul

+0

@Flauwekeul Dlaczego zakres jest głupi w tym względzie? –

+0

Co masz na myśli mówiąc "clunk"? – Flauwekeul

Odpowiedz

9

Myślę, że tak nie jest.

Wygląda na to, że lepiej jest to zrobić za pomocą Range.

+1

Przepraszam, czy mógłbyś wyjaśnić? Myślisz, że '' 'Range''' (sposób jaki mam w pytaniu) jest najlepszym sposobem na zrobienie tego? –

+1

@SherwinYu, tak, jest. –

5

Tutaj jest "ładniej", jeśli chcesz. Możesz rozszerzyć klasę String ruby, a następnie użyć tej metody do swojego kodu. Na przykład:

class String 
    def last num 
    self[-num..-1] 
    end 
end 

, a następnie:

s = "hello world" 
p s.last(6) 
+3

OP nie zażądał sposobu uzyskania ostatnich X znaków. Pytali, jak uzyskać znaki z X na końcu ciągu znaków –

2

można rozszerzyć klasę String. Nie jestem pewien, czy jest to idiom rubin choć:

class String 
    def last(n) 
    self[(self.length - n)..-1] 
    end 
end 
+0

OP chce, aby ostatnie znaki zaczynały się od 'n'. Nie ostatni znak 'n'. –

3

Jeśli chcesz uzyskać ciąg z indeksem do pełnej długości strun

s = "hello world" 
s[ 5 .. s.length -1 ] 
+2

Powinien to być 's [5.s.s. length - 1]' –