From: nobu@... Date: 2019-06-22T06:03:08+00:00 Subject: [ruby-core:93312] [Ruby trunk Feature#15950] Allow negative length in `Array#[]`, `Array#[]=`, `String#[]`, `String#[]=` Issue #15950 has been updated by nobu (Nobuyoshi Nakada). Negative **offset** is allowed, but negative **length** has never been allowed, IIRC. ---------------------------------------- Feature #15950: Allow negative length in `Array#[]`, `Array#[]=`, `String#[]`, `String#[]=` https://bugs.ruby-lang.org/issues/15950#change-78785 * Author: sawa (Tsuyoshi Sawada) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- To take the first n characters of a string, using `[]` is straightforward: ```ruby "abcdefgh"[0, 3] # => "abc" ``` But to take the last n characters, we need to use n in two arguments: in the index (in negative form) in addition to the length: ```ruby "abcdefgh"[-3, 3] # => "fgh" ``` This is cumbersome. I wish negative length to be allowed, and be interpreted as measuring leftward (while cycling the receiver if necessary). ```ruby "abcdefgh"[0, -3] # => "fgh" "abcdefgh"[5, -3] # => "cde" ``` If there is not enough characters or elements, it should stop at the boundary. ```ruby "abcdefgh"[1, -3] # => "a" ``` -- https://bugs.ruby-lang.org/ Unsubscribe: