インデックスからサブストリングを抽出するためのRubyイディオムがあるかどうか疑問に思う。範囲オブジェクトをString
のstr[index..-1]
メソッドに渡すことで機能する[]
を知っているたとえば、Pythonでは、str[index:]
を記述して、暗黙的に残りの文字列を取得できます。
例:
s = "hello world"
s[6..-1] # <-- "world"
s[6..-1]
よりも優れたものはありますか?
そうではないと思います。
Range
がより良い方法のようです。
ご希望の場合はこちらをご覧ください。 Ruby Stringクラスを拡張し、このメソッドをコードに使用できます。例:
class String
def last num
self[-num..-1]
end
end
その後:
s = "hello world"
p s.last(6)
範囲から文字列を取得するには:
s = 'hello world'
s[5..s.length - 1] # world
ただし、最後のWordを取得するだけの場合:
'hello world'.split(' ').last # world
String
クラスを拡張できます。 Rubyイディオムかどうかはわかりませんが:
class String
def last(n)
self[(self.length - n)..-1]
end
end
Railsのactivesupport
ライブラリ(Railsから独立したgemとしてインストール可能)は、文字列にfrom
メソッドを追加します。
> s = "hello world"
"hello world"
> s.from(6)
"world"
https://api.rubyonrails.org/classes/String.html#method-i-from
Ruby 2.6では 無限の範囲 が導入され、基本的に終了インデックスを指定する必要がなくなりました。あなたの場合、次のことができます:
s = "hello world"
s[6..]