[ruby-core:96340] [Ruby master Misc#16436] hash missing #last method, make it not so consistent (it has first)

[email protected]
Newsgroups gmane.comp.lang.ruby.core
Message-ID <redmine.journal-83248.20191219162728.41b2f6b038361d97@ruby-lang.org>
Issue #16436 has been updated by zverok (Victor Shepelev).


`Hash` doesn't have `#first` either :)

```ruby
Hash.instance_method(:first)
# => #<UnboundMethod: Hash(Enumerable)#first(*)>
#                          ^^^^^^^^^^
```

The `first` method existence is just because of hash being a `Enumerable`, not because "first pair(s) of hash" seen as having some frequently used meaning.

(As a side note, Ruby probably could've had `BidirectionalEnumerable` for collections which can be enumerated both directions without side-effects; this one would be a good place to have `#last` method.)

----------------------------------------
Misc #16436: hash missing #last method, make it not so consistent (it has first)
https://bugs.ruby-lang.org/issues/16436#change-83248

* Author: zw963 (Wei Zheng)
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
``` ruby
(pry):main(0)> h = {x:1, y:2, z:3}
{
    :x => 1,
    :y => 2,
    :z => 3
}
(pry):main(0)> h.first
[
    :x,
    1
]
(pry):main(0)> h.first.first
:x
(pry):main(0)> h.first.last
1
```

last method not exist.

```ruby
(pry):main(0)> h.last

Exception: NoMethodError: undefined method `last' for {:x=>1, :y=>2, :z=>3}:Hash
```

We have to use #to_a to make last working.

```ruby
(pry):main(0)> h.to_a.last
[
    :z,
    3
]

(pry):main(0)> h.to_a.last.first
:z
(pry):main(0)> h.to_a.last.last
3
```






-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.