From: "david_macmahon (David MacMahon)" Date: 2013-10-24T13:53:03+09:00 Subject: [ruby-core:58009] [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing Issue #9049 has been updated by david_macmahon (David MacMahon). I like the compactness of the a:b notation. My preference would be for it to be a Range shorthand, but I think that would conflict with the {a:b} Hash syntax (especially when passing a Hash as the last argument to a method). Another thing that would be useful (and probably belongs in a different feature request) is a NumericRange class that supports a "step_size" attribute in addition to "first" and "last" attributes. Maybe NumericRange is too specific a name since it is possible for non-numeric types to support the "step_size" concept (e.g. Date) so maybe "RangeWithStepSize" would be more appropriate (though too long!). Then we could dream about Matlab-like syntax `(1:2:5).to_a => [1, 3, 5]`. Maybe just enhance Range to have an explicit step_size that can be something other than the implicit default of 1 (and 0)? ---------------------------------------- Feature #9049: Shorthands (a:b, *) for inclusive indexing https://bugs.ruby-lang.org/issues/9049#change-42590 Author: mohawkjohn (John Woods) Status: Open Priority: Low Assignee: Category: core Target version: =begin For NMatrix, we've implemented a range shorthand which relies on Hashes: (({m[1=>3,2=>4]})), for example, which returns rows 1 through 3 inclusive of columns 2 through 4 (also inclusive). The original goal was to be able to do (({m[1:3,2:4]})) using the new hash notation, but the new hash notation requires that the key be a symbol ��� it won't accept an integer. Whether through the hash interface or not, it'd be lovely if there were a shorthand for slicing matrices (and even Ruby Arrays) using colon. This could just be an alternate syntax for ranges, also ��� which might make more sense. The other related shorthand we'd love to find a way to implement is the all-inclusive shorthand. It gets to be a pain to type (({n[0...n.shape[0],1...3]})) to get a submatrix (a slice), and it's really difficult to read. As a work-around, we currently use the (({:*})) symbol: (({n[:*,1...3]})). But it'd be simpler if there were a way to use a splat operator without an operand as a function argument. It might be a special case where the (({*})) is treated as a (({:*})) automatically. But this edge case might cause confusion with error messages when users make syntax errors elsewhere. The colon shorthand is the highest priority for us. =end -- http://bugs.ruby-lang.org/