[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>

21 messages 2000/09/04
[#4768] RE: Wiki — "NAKAMURA, Hiroshi" <nahi@...> 2000/09/04

Hi, Glen,

[#4783] Re: Wiki — Masatoshi SEKI <m_seki@...> 2000/09/04

[#4785] Re: Wiki — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/09/05

Howdy,

[#4883] Re-binding a block — Dave Thomas <Dave@...>

16 messages 2000/09/12

[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/09/15

[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>

20 messages 2000/09/16

[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>

15 messages 2000/09/21

[#5077] Crazy idea? infix method calls — hal9000@...

This is a generalization of the "in" operator idea which I

17 messages 2000/09/22

[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>

When I try to compile Ruby 1.6.1, I get the following error:

15 messages 2000/09/27

[ruby-talk:4903] Trying to grasp possibilities of dynamical Ruby

From: Robert Feldt <feldt@...>
Date: 2000-09-12 16:10:03 UTC
List: ruby-talk #4903
Hi,

I have a class hierarchy and want to have a general way of combining
objects so that the combination is also in the hierarchy. Simplified
example:

class Func
  def f(x)
    x
  end
end
class SimpleFunc < Func
  def f(x)
    x+1
  end
end
class FancyFunc < Func
  def fancymethod
    # whatever...
  end
  def f(x)
    x**2
  end
end

# I want to be able to transform the f in one Func with the f in another.
# The transformed object should be of the same type as the first Func.
def transform_func(fo1, fo2)
  fo1.instance_eval( "alias _old_f f" )
  fo1.instance_eval( "@tf = fo2" )
  def fo1.f(x)
    @tf.f(_old_f(x))
  end
  fo1
end
my_func1 = transform_func( FancyFunc.new, SimpleFunc.new )
my_func2 = transform_func( SimpleFunc.new, FancyFunc.new )

# so that
p my_func1.f( 2 ) # -> 5 (2**2 + 1) ie.
SimpleFunc.new.f(FancyFunc.new.f(2))
p my_func2.f( 2 ) # -> 9 ((2+1)**2)

#and
p my_func1.type # -> FancyFunc
p my_func2.type # -> SimpleFunc

Well the code above works and it's of course very nice to be able to do
these kinds of things, but I keep feeling a bit uneasy having to eval code
in strings. Thus:

* Are there other/better ways to accomplish the stuff above? Preferred
way?

* Are there performance bottlenecks with the code above? Say if I need to
transform several hundred thousand FancyFunc objects...

Regards,

Robert



In This Thread

Prev Next