[#35400] Fwd: [ruby-cvs:38176] Ruby:r30994 (trunk): * string.c (rb_str_byteslice): the resulted encoding should keep — "Martin J. Dst" <duerst@...>
I'm really surprised that the encoding is kept for an arbitrary byteslice.
[#35403] Why are hash keys sometimes duped? — Aaron Patterson <aaron@...>
Why are some objects duped when they are used as hash keys and other
Aaron Patterson <aaron@tenderlovemaking.com> wrote:
[#35417] [Ruby 1.9 - Bug #4463][Open] [PATCH] release GVL for fcntl() for operations that may block — Eric Wong <normalperson@...>
> Issue #4463 has been reported by Eric Wong.
Hi
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
Hi
[#35426] [Ruby 1.8 - Bug #4467][Open] Process.maxgroups= should only accept numeric values — Daniel Berger <djberg96@...>
[#35440] [Ruby 1.9 - Feature #1047] request: getters, setters for the GC — Narihiro Nakamura <authorNari@...>
[#35446] [Ruby 1.9 - Bug #4477][Open] Kernel:exec and backtick (`) don't work for certain system commands — Joachim Wuttke <j.wuttke@...>
[#35462] Source for 1.8 syck gram.y and token.re? — Kurt Stephens <ks@...>
I found bug in 1.8 ext/syck. The problem is in gram.c and/or token.c.
This is obviously dead and gone: http://whytheluckystiff.net/syck/
Syck is dead. 1.9 should make Psych/libyaml default. The fact that
I know syck is dead.
Maybe it's possible to bribe Aaron into releasing a Psych gem for 1.8?
[#35483] /proc/$PID/environ in Linux — Eric Wong <normalperson@...>
I wanted to inspect the environment of a long-running process[1] and I
[#35494] Re: can someone explain this? — Michael Edgar <adgar@...>
[+ruby-core]
[#35509] Why has defined? been changed for autoloaded constants in 1.9? — Nikolai Weibull <now@...>
Hi!
[#35513] String#upcase and UTF-8/Unicode not working — Nikolai Weibull <now@...>
Why does the following print ”äBC” instead of ”ÄBC”?
[#35519] NoMethodError#message may take very long to execute — Adiel Mittmann <adiel@...>
Hello,
[#35528] [Ruby 1.9 - Feature #4512][Open] [PATCH] ext/fcntl/fcntl.c: add F_DUPFD_CLOEXEC constant — Eric Wong <normalperson@...>
[#35536] File.write take 4 — Roger Pack <rogerdpack2@...>
Hello all.
Could I get any feedback on my latest patch for File.write?
[#35552] [Ruby 1.9 - Feature #4523][Open] Kernel#require to return the path of the loaded file — Alex Young <alex@...>
On 18/03/12 10:22, nobu wrote:
On Mon, Mar 19, 2012 at 8:06 AM, Alex Young <alex@blackkettle.org> wrote:
On 19/03/12 11:58, Luis Lavena wrote:
[#35555] [Ruby 1.9 - Bug #4527][Open] [PATCH] IO#close releases GVL if possible — Eric Wong <normalperson@...>
[#35565] [Ruby 1.9 - Feature #4531][Open] [PATCH 0/7] use poll() instead of select() in certain cases — Eric Wong <normalperson@...>
> ref: [ruby-core:35527]
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
2011/3/29 Eric Wong <normalperson@yhbt.net>:
Comment for patch 2.
Motohiro KOSAKI <kosaki.motohiro@gmail.com> wrote:
diff --git a/ext/-test-/wait_for_single_fd/wait_for_single_fd.c
[#35566] [Ruby 1.9 - Feature #4532][Open] [PATCH] add IO#pread and IO#pwrite methods — Eric Wong <normalperson@...>
2011/3/28 Eric Wong <normalperson@yhbt.net>:
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[#35567] [Ruby 1.9 - Bug #4534][Open] ri does not open $PAGER with program name only — Robert Klemme <shortcutter@...>
[#35586] [Ruby 1.9 - Feature #4538][Open] [PATCH (cleanup)] avoid unnecessary select() calls before doing I/O — Eric Wong <normalperson@...>
Charles Nutter <headius@headius.com> wrote:
[ruby-core:35563] Re: [feature:trunk] Enumerable#categorize
Following the comments of Akira and others, here's a revised proposal
merging his original Enumerable#categorize with my previous version.
Like Akira's categorize, it now:
* can produce nested hashes
* returns an Enumerator with not given a block
Like my original proposal, it still:
* has a simple interface with a single argument for special merges
* does not produce "grouped hashes" by default
Here is what the documentation could read like:
enum.associate(merge = nil){ block } # => a_hash
Invokes block once for each element of +enum+. Creates a new hash based on
the values returned by the block. These values are interpreted as a sequence
of keys and the final value.
(1..3).associate {|e| ["#{e} + #{e}", e+e] }
#=> {"1 + 1" => 2, "2 + 2" => 4, "3 + 3" => 6}
If more than one key is specified, the resulting hash will be nested.
(0..7).associate {|e| [e&4, e&2, e&1, e] }
#=> {0=>{0=>{0=>0,
1=>1},
2=>{0=>2,
1=>3}},
4=>{0=>{0=>4,
1=>5},
2=>{0=>6,
1=>7}}}
If no key is specified, either because the block returned an array
with less than two elements, or because only the value is not an Array,
then the key is assumed to be the yielded element itself
(or the first element in case many elements are yielded):
(1..4).associate{|i| i ** i} # => {1 => 1, 2 => 2, 3 => 27, 4 => 256}
{:foo => 2, :bar => 3}.associate{|k, v| v ** v}
# => {:foo => 4, :bar => 9}
In case of key duplication, +merge+ will be used. If +nil+, the value
is overwritten. Otherwise the stored value will be the result of calling
`merge` with the arguments +key+, +first_value+ and +other_value+
(see Hash#merge). In a similar way to `Enumerable#inject`, passing a symbol
for +merge+ is equivalent to passing
<tt>->(key, first, other){ first.send(merge, other) }</tt>
x = [[:foo, 10], [:bar, 30], [:foo, 32]]
x.associate{|e| e} # => {:foo => 32, :bar => 30}
x.associate(->(k, a, b){a}){|e| e} # => {:foo => 10, :bar => 30}
x.associate(:+){|e| e} # => {:foo => 42, :bar => 30}
x.associate(:concat){|k, v| [k, [v]]} # => {:foo => [10, 32],
:bar => [30]}
A question that remains is: should there be special checks for cases
where the result has varying length?
E.g., what error should the following raise (or what should be the result):
[[:foo, :bar], [:foo, :bar, :baz]].associate{|x| x} # => ??
Here is what a Ruby implementation could look like:
module Enumerable
def associate(merge_func = nil)
return to_enum, __method__, merge_func unless block_given?
if merge_func.is_a? Symbol
sym = merge_func
merge_func = ->(k, v1, v2){v1.send(sym, v2)}
end
top_level_hash = {}
each do |*elems|
result = yield(*elems)
result = [result] unless result.is_a? Array
value = result.pop
if result.empty? # deduce key
key = elems.first
key = key.first if key.is_a?(Array)
initial_keys = []
else
key = result.pop
initial_keys = result
end
final_hash = initial_keys.inject(top_level_hash){|cur_h, k|
cur_h[k] ||= {}}
if merge_func && final_hash.has_key?(key)
value = merge_func.call(key, final_hash[key], value)
end
final_hash[key] = value
end
top_level_hash
end
end
Thanks
--
Marc-Andr