Hi,
In message "Re: Enumerable#select used to return actual values"
on Fri, 5 Dec 2008 02:07:03 +0900, Trans <transfire / gmail.com> writes:
|> |> (1..10).collect{ |a| a * a if a > 5 }.compact
|> |And that's exactly what I suggested for #compact, to take a block but
|> |faster b/c it's one pass.
|>
|> I don't deny the existence of use case of such method (although I
|> cannot think of any realistic one right now), but its name should not
|> be #compact, since it does far more than compacting the receiver.
|
|Why do you say? Is not "compact conditionally on result of block" a
|good meaning?
As far as I understand, the word compact means removing empty spaces,
not transforming elements. If you really want a method to transform
elements and to remove some of them at once, in the standard class
library, you have to coin the proper term.
|The implementation I have also allows an optional argument to define
|what is to be subjected to compacting.
|
| [1,2,3].compact(1) #=> [2,3]
For me, Array#compact sounds more like #squeeze in String class.
I think we have better term #remove, #delete, or #reject for that
purpose. We should not overuse the term compact. Am I wrong, native
speakers?
matz.