Hi, rb_protect() is declared as:
VALUE
rb_protect(VALUE (* proc) (VALUE), VALUE data, int * state)
Ok, so if from C I want to call a Ruby method passing N VALUE
parameters, should I really create a Ruby Array and pass it as data
in rb_protect() ?? really? is there any other way?
Thanks a lot.
you could use something like this:
struct yourdatatype
{
};
yourdatatype val;
rb_protect(…,(VALUE)&yourdatatype, … )
anyone can give me a hand with this pls
http://pastie.org/3964924
On Thu, May 24, 2012 at 8:59 PM, Iñaki Baz C. [email protected]
wrote:
Ok, so if from C I want to call a Ruby method passing N VALUE
parameters, should I really create a Ruby Array and pass it as data
in rb_protect() ?? really? is there any other way?
I did not find another way after searching for a while, including the
source of all the extensions I could get my hands on. I was a little
surprised too.
I ended up writing my own wrappers around rb_funcall and rb_funcall2,
using
rb_rescue2. Here’s a gist:
Examples of wrapping rb_funcall and rb_funcall2 with rb_rescue2. · GitHub
These come from a program that embeds ruby, not an extension, so they
were
written to suit those needs. For example, rescuing rb_eException might
be
too broad, and registering/unregistering args with the GC might not be
necessary for all applications. I think this is most probably the reason
why ruby does not provide such functions.
In any event, I’ve been meaning to put these snippets out there in a
related thread in hope they might help someone. I hope they help you in
some way. I would be very interested in any feedback you might have.
Regards,
Ammar
You are comparing the values as strings (
Class: String (Ruby 1.9.3)). You
need
to convert the values to floats, by changing
p data[0].map {|f| f[‘price’]}.flatten.max
to
p data[0].map {|f| f[‘price’].to_f}.flatten.max
(although the flatten seems unnecessary).
Alternatively:
- use the CSV library’s numeric converter to convert the fields when
they
are read
- don’t use CSV library if the data is this simple
–pcs
On Fri, May 25, 2012 at 12:06 AM, Ivan Vilches B. <
On Fri, May 25, 2012 at 3:06 PM, Ivan Vilches B.
[email protected] wrote:
anyone can give me a hand with this pls
http://pastie.org/3964924
as paul have said, data is being treated as text. since you are using
csv lib, use the :converters option… on your case, :converters=>:all
is good enough.
best regards -botp
Really interesting your approach 
Thanks a lot to both.
2012/5/25 Ammar A. [email protected]: