0

私はRubyチュートリアル(フープと笑いのためだけに)を進めています。例の1つを実験していると、この動作は予期しないものでした。

s = "hello"
s[1, 2]          # => "el"
s[1 .. 2]        # => "el"
s[-4 .. -3]      # => "el"
s[-4, -3]        # => nil ... but why?

最後の行で前の行と同じ結果が得られると思っていました。結局のところ、それは正のスライス値でそのように機能します。どこが間違っているのですか?

4

2 に答える 2

4

スライスの負の長さは意味がないためです。スライスメソッドは、インデックス、またはインデックスの範囲、または開始と長さを取ります。

s[-4 .. -3] # here you're passing the slice method a range of numbers
s[-4, -3]   # here you're passing the slice method: start = -4, length = -3

s[-4, 2] => "el"

Stringクラスのsliceメソッドのドキュメント

于 2012-05-30T19:20:02.693 に答える
3

a[x, y]は「からのy要素、からa始まるx

a[x..y]は「からからxへの要素」ですya

これを試してみると、正の数も一致しないことがわかります-偶然の一致があります:

a = [1, 2, 3, 4, 5, 6]
a[3, 2]   # [4, 5] (i.e. two elements from a, starting from the third)
a[3..2]   # []     (i.e. elements from third to second, from a)
于 2012-05-30T19:21:05.803 に答える