[#16113] Strange idea... exporting from a scope — "Hal E. Fulton" <hal9000@...>

Hello...

33 messages 2001/06/01

[#16364] Re: Garbage Collection? — Michael Davis <mdavis@...>

Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs.

12 messages 2001/06/09

[#16400] Symbolic Computation III — Mathieu Bouchard <matju@...>

14 messages 2001/06/11

[#16502] Playing with Ruby Syntax (was: Initial thoughts about Ruby From a Smalltalk Programmer) — jweirich@...

Michael> Hi Everyone, I have to say I'm utterly fascinated by Ruby

9 messages 2001/06/15

[#16661] Problem running irb with Ruby 1.6.4 under FreeBSD 4.0 — Bob Alexander <balexander@...>

I've installed Ruby 1.6.4 on a FreeBSD 4.0 machine, and get the

11 messages 2001/06/20

[#16686] opening db files made by apache dbmmanage — Fritz Heinrichmeyer <fritz.heinrichmeyer@...>

14 messages 2001/06/21

[#16801] rb_define_class() vs Class.new() — Kero van Gelder <kero@...4050.upc-d.chello.nl>

Hi,

18 messages 2001/06/23
[#16802] Re: rb_define_class() vs Class.new() — ts <decoux@...> 2001/06/23

>>>>> "K" == Kero van Gelder <kero@d4050.upc-d.chello.nl> writes:

[#16841] RE: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...>

Next week I'll try to rebuild Ruby with Unicode strings. But it would be

15 messages 2001/06/25
[#16842] Re: national characters is strings — matz@... (Yukihiro Matsumoto) 2001/06/25

Hi,

[#16843] Re: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/25

That's good enough. But I'm afraid this could ( not would ) cause string

[#16868] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

14 messages 2001/06/25
[#16873] RE: Something strange with Ruby's inheritance mechanism — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/26

[#16879] Re: Something strange with Ruby's inheritance mechanism — Mathieu Bouchard <matju@...> 2001/06/26

On Tue, 26 Jun 2001, Aleksei Guzev wrote:

[#16869] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

12 messages 2001/06/25

[#16881] — "Aleksei Guzev" <aleksei.guzev@...>

32 messages 2001/06/26
[#16916] Re: Method overloading (option) Was: Re: — "Wayne Blair" <wayne.blair@...> 2001/06/26

[#16920] Re: Method overloading (option) Was: Re: — matz@... (Yukihiro Matsumoto) 2001/06/26

Hi,

[#16888] finalizers, destructors and whatnot — "David Leal" <david@...>

Hi all,

16 messages 2001/06/26

[#17037] keeping an Exception object alive — David Alan Black <dblack@...>

Hello --

19 messages 2001/06/28
[#17055] Re: keeping an Exception object alive — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17066] RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17076] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17079] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17138] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/07/02

Hi,

[#17141] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/07/02

Hello --

[#17142] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — ts <decoux@...> 2001/07/02

>>>>> "D" == David Alan Black <dblack@candle.superlink.net> writes:

[ruby-talk:16726] Simulating call-by-reference in Ruby

From: senderista@... (Tobin Baker)
Date: 2001-06-21 21:21:50 UTC
List: ruby-talk #16726
I'm currently working on Ruby bindings for ORBit and thought that it
would be nice if I could simulate call-by-reference for inout
parameters.  The Perl bindings for ORBit do this quite nicely, e.g.:

//IDL

interface Foo {
    void bar(inout int baz);
}

#Perl

#somehow get reference to Foo object $myFoo
#assume Foo implementation adds 1 to argument baz
my $baz = 10;
$myFoo->bar(\$baz);
print $baz; #=> 11

As you can see, you just have to add an extra reference to each inout
parameter.

Python doesn't have anything like Perl's reference operator, so the
mapping spec recommends passing inout parameters like in parameters,
and returning them in a tuple together with the return value (if any)
and all out parameters.  To me this is somewhat inelegant and does a
rather poor job of emulating inout semantics, but there may be no
alternative in Python.  In Ruby, however, we *can* simulate reference
parameters by having the caller pass a symbol instead of the variable
itself, getting the value of the variable for that symbol from the
caller's context (using eval), and then using eval again to write
another value into that variable.  E.g.:

baz = 10
myFoo.bar(:baz)
p baz #=> 11

The problem is that there doesn't seem to be any way to access the
caller's context without cooperation from the caller, e.g., having
them pass a Binding object as a parameter to the method they're
calling.  I noticed on ruby-talk that some other people had struggled
with this problem as well.  I had hoped at first that caller() might
give me what I was looking for, but of course it just returns a stack
trace, not a Binding object.  Wouldn't it be useful to have a way for
any method to access its caller's context?  Is anyone considering this
as an addition to Ruby 1.7, or are there insurmountable implementation
difficulties?  (I know next to nothing about Ruby internals.)  Anyway,
here's the best I can do now:

baz = 10
myFoo.bar(:baz, inout)
p baz #=> 11

The implementation is in C, but looks something like this:

class Object
  alias_method :inout, :binding
end

def bar(baz, bind)
  if baz.instance_of?(Symbol)
    eval "#{baz.id2name} += 1", bind
  else
    raise TypeError, "Argument not a symbol"
  end
end

In This Thread

Prev Next