[#73707] [Ruby trunk Misc#12004] Code of Conduct — hanmac@...
Issue #12004 has been updated by Hans Mackowiak.
3 messages
2016/02/05
[#73730] [Ruby trunk Feature#12034] RegExp does not respect file encoding directive — nobu@...
Issue #12034 has been updated by Nobuyoshi Nakada.
3 messages
2016/02/07
[#73746] [Ruby trunk Feature#12034] RegExp does not respect file encoding directive — nobu@...
Issue #12034 has been updated by Nobuyoshi Nakada.
3 messages
2016/02/09
[#73919] [Ruby trunk Feature#11262] Make more objects behave like "Functions" — Ruby-Lang@...
SXNzdWUgIzExMjYyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgSsO2cmcgVyBNaXR0YWcuCgpQcm9qZWN0
3 messages
2016/02/22
[#74019] [Ruby trunk Bug#12103][Rejected] ruby process hangs while executing regular expression. — duerst@...
SXNzdWUgIzEyMTAzIGhhcyBiZWVuIHVwZGF0ZWQgYnkgTWFydGluIETDvHJzdC4KClN0YXR1cyBj
3 messages
2016/02/27
[ruby-core:73925] Re: [Ruby trunk Bug#12100] CSV converters fail when using single arg proc
From:
Recursive Madman <recursive.madman@...>
Date:
2016-02-22 16:39:37 UTC
List:
ruby-core #73925
I'm pretty sure this will introduce new bugs.
The meaning of an arity of -1 is "any number of arguments".
In reality you're not passing a proc which takes 1 argument (which would
work w/o your patch), but a proc which takes any number of arguments.
The reason for the `:strip.to_proc` Proc to take an arbitrary number of
arguments (while String#strip) does not, is that Symbol#to_proc cannot
know the arity of the method call it is wrapping, thus always accepting
any number of arguments.
To illustrate,
:strip.to_proc is equivalent to -> receiver, *rest {
receiver.strip(*rest) }
When you pass a proc like:
-> receiver { receiver.strip }
directly, everything should work fine.
Only by using Symbol#to_proc you "break" the arity check within the CSV
library.
On 02/22/2016 05:14 PM, mdaubert@gmail.com wrote:
> Issue #12100 has been reported by Matthew Daubert.
>
> ----------------------------------------
> Bug #12100: CSV converters fail when using single arg proc
> https://bugs.ruby-lang.org/issues/12100
>
> * Author: Matthew Daubert
> * Status: Open
> * Priority: Normal
> * Assignee:
> * ruby -v: all versions 2.0, 2.1, 2.2, 2.3, trunk
> * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
> ----------------------------------------
> CSV#parse (and others) throw an ArgumentError when passing a single argument Proc as a converter because of a performance optimization check that assumes Proc#arity is always positive. Lambdas with one argument work fine as do Procs and lambdas with two arguments. The documentation suggests to me that either should work. Supporting the Proc variant is trivial and allows to_proc and to_proc shortcut syntax to be used eliminating the surprising behavior and uninformative error message. Illustration of the problem is below and a patch with tests is attached. I'm also creating a PR on Github because I think this is a minor enough change to be merged quickly. Thank you.
>
> ~~~
> require 'csv'
> puts CSV.parse(" foo , bar ", converters: -> f { f.strip }).inspect
> puts CSV.parse(" foo , bar ", converters: :strip.to_proc).inspect
>
> # Without patch this outputs:
> # [["foo", "bar"]]
> # /home/mdaubert/.rbenv/versions/2.3.0/lib/ruby/2.3.0/csv.rb:2205:in `strip': wrong number of arguments (given 1, expected 0) (ArgumentError)
>
> # With patch this outputs:
> # [["foo", "bar"]]
> # [["foo", "bar"]]
> ~~~
>
> ---Files--------------------------------
> fix_csv_converter_single_arg_proc.patch (1.78 KB)
>
>
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>