[#138] Thread Problems — Reimer Behrends <behrends@...>

I have been looking at the thread implementation of Ruby for the past

21 messages 1998/12/23
[#164] Re: Thread Problems — matz@... (Yukihiro Matsumoto) 1999/01/05

Hi.

[#167] Makefiles and -lcurses — Klaus.Schilling@... 1999/01/05

Julian Fondren writes:

[#168] Re: Makefiles and -lcurses — Julian Fondren <julian@...> 1999/01/05

OpenBSD has ncurses and it's own ocurses, and I prefer the latter.

[ruby-talk:00150] Re: calling a Ruby function from C?

From: shugo@... (Shugo Maeda)
Date: 1998-12-27 14:51:30 UTC
List: ruby-talk #150
Hi, Bryce,

In message "[ruby-talk:00146] calling a Ruby function from C?"
"Bryce" <crowdog@siscom.net> wrote:

|What I am wanting to accomplish is like a callback.
|
|I would like to send my C code a Ruby function pointer
|so that C can call my Ruby function.

You can use a Method object to pass a Ruby function to C function.

C:

	VALUE c_func(VALUE self, VALUE func)
	{
	    ...
	    rb_funcall(func, rb_intern("call"), 0);
	    ...
	}

Ruby:

	def foo
	  puts "foo"
	end

	c_func(method(:foo))

And you can also pass a Proc object to c_func.

	p = proc { puts "foo" }
	c_func(p)


But it may be better way to define an iterator.
-- The name `iterator' may be obsolete.

C:

	VALUE c_func2(VALUE self)
	{
	    ...
	    rb_yield(Qnil);
	    ...
	}

Ruby:

	def foo
	  puts "foo"
	end

	c_func2 { foo }

You can also pass a method object to c_func2:-)
like this:

	c_func(&method(:foo))

& means passing an argument as an iterator block.

Hope this helps, Salut!
Shugo

In This Thread

Prev Next