[#67346] Future of test suites for Ruby — Charles Oliver Nutter <headius@...>
I'll try to be brief so we can discuss all this. tl;dr: RubySpec is
19 messages
2015/01/05
[#67353] Re: Future of test suites for Ruby
— Tanaka Akira <akr@...>
2015/01/05
2015-01-06 7:18 GMT+09:00 Charles Oliver Nutter <headius@headius.com>:
[#67444] [ruby-trunk - Feature #10718] [Open] IO#close should not raise IOError on closed IO objects. — akr@...
Issue #10718 has been reported by Akira Tanaka.
3 messages
2015/01/09
[#67689] Keyword Arguments — Anthony Crumley <anthony.crumley@...>
Please forgive my ignorance as I am new to MRI development and am still
5 messages
2015/01/20
[#67733] [ruby-trunk - Bug #10761] Marshal.dump 100% slower in 2.2.0 vs 2.1.5 — normalperson@...
Issue #10761 has been updated by Eric Wong.
4 messages
2015/01/21
[#67736] Re: [ruby-trunk - Bug #10761] Marshal.dump 100% slower in 2.2.0 vs 2.1.5
— Eric Wong <normalperson@...>
2015/01/22
normalperson@yhbt.net wrote:
[#67772] Preventing Redundant Email Messages — Jeremy Evans <code@...>
For a long time, I've wondered why I sometimes receive redundant email
5 messages
2015/01/23
[ruby-core:67513] Refinements on modules?
From:
Avdi Grimm <avdi@...>
Date:
2015-01-11 18:56:56 UTC
List:
ruby-core #67513
The other day on the Ruby Rogues forum, someone asked how to idiomatically
write the following Clojure example in Ruby:
(take 25 (squares-of (integers)))
My answer was:
0.step.lazy.map{ |n| n**2 }.take(25).to_a
...which I'm pretty happy with, since it's reasonably concise and preserves
the laziness of the Clojure version.
The only part that bothered me was the squaring calculation: map{ |n| n**2 }
Presumably, `squares-of` is a Clojure built-in. I don't think Ruby should
add this to Enumerable; it's far too niche a use case. But I wanted a way
to insert a Ruby-ish squares_of directly into the chain of operations, like
this:
0.step.lazy.squares.take(25).to_a
Obviously I could monkeypatch Enumerable to get this. But I thought it
would be nicer to make the patch non-invasive using refinements. And here's
where I ran into a snag: you can't refine modules.
I wound up refining Enumerator:
module Squares
refine Enumerator do
def squares
map{ |n| n**2 }
end
end
end
using Squares
0.step.lazy.squares.take(5).to_a # => [0, 1, 4, 9, 16]
This works fine. But I'm bothered by refining Enumerator instead of
Enumerable. It means that the refinement isn't generic. In order to have
consistency, I have to know exactly what class[es] might be involved, and
refine all of them.
This doesn't feel very duck-type friendly. And the more I think about uses
of refinements, the more I think of wanting to refine modules that are
widely included, such as Enumerable or Comparable.
So my question is: is this a feature that is coming?
--
Avdi Grimm
http://avdi.org