Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.ruby > #2927
| From | Robert Klemme <shortcutter@googlemail.com> |
|---|---|
| Newsgroups | comp.lang.ruby |
| Subject | Re: looking for an "inversion" pattern |
| Date | 2011-04-15 04:24 -0500 |
| Organization | Service de news de lacave.net |
| Message-ID | <BANLkTikFjzEuhMevuXJ6ZGSHA6h=MNTnjA@mail.gmail.com> (permalink) |
| References | <d0c168880ff1c65dd84fc6d70778ddb2@ruby-forum.com> <7c9986702d2a6acd3748e6cca228d8da@ruby-forum.com> |
On Fri, Apr 15, 2011 at 8:27 AM, Fearless Fool <r@alum.mit.edu> wrote:
> Fearless Fool wrote in post #992929:
>> Maybe I'm overthinking this...
>
> Meh. I s'pose I can substitute an underscore for a period:
>
> my_obj.foo_some_method(*args)
>
> ... whereupon this become a simple mixin on my_obj's class:
>
> def foo_some_method(*args) {
> MyClass.some_method(self, *args)
> }
>
> The only potential disadvantage is that I need to write one of these for
> each method. The advantages include likely to run much faster (than
> constructing lambdas or invoking method_missing processing) and possibly
> easier to understand and maintain than what I was originally trying to
> do.
I am sorry, I still do not understand your motivation to have a class
method which receives an instance as first argument. Isn't this
conceptually exactly what an instance method is for? Why do you need
this?
If you need this as general pattern you could always do
class X
def method_missing(m, *a, &b)
self.class.send(m, self, *a, &b)
end
def self.foo(obj, str)
printf "%p: %s\n", obj, str
end
end
X.new.foo 123
But I would seriously question the wisdom of this. :-)
Other than that I would follow Jesus's approach to make #foo create a
proxy instance. Here's another way to do it which would also allow
method chaining on the proxy:
class Proxy < BasicObject
def initialize(orig, delegate)
@orig = orig
@delegate = delegate
end
def method_missing(m, *a, &b)
res = @delegate.send(m, @orig, *a, &b)
@orig.equal?(res) ? self : res
end
end
class Object
# create proxy for delegation to given
# instance
def proxy(delegate)
Proxy.new(self, delegate)
end
end
class YourClass
def proxy
super(MyClass)
end
end
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
Back to comp.lang.ruby | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
looking for an "inversion" pattern Fearless Fool <r@alum.mit.edu> - 2011-04-15 00:16 -0500
Re: looking for an "inversion" pattern Fearless Fool <r@alum.mit.edu> - 2011-04-15 01:27 -0500
Re: looking for an "inversion" pattern Robert Klemme <shortcutter@googlemail.com> - 2011-04-15 04:24 -0500
Re: looking for an "inversion" pattern Fearless Fool <r@alum.mit.edu> - 2011-04-15 10:40 -0500
Re: looking for an "inversion" pattern Robert Klemme <shortcutter@googlemail.com> - 2011-04-16 15:29 +0200
Re: looking for an "inversion" pattern Kevin Mahler <kevin.mahler@yahoo.com> - 2011-04-15 02:14 -0500
Re: looking for an "inversion" pattern Fearless Fool <r@alum.mit.edu> - 2011-04-15 02:43 -0500
Re: looking for an "inversion" pattern Kevin Mahler <kevin.mahler@yahoo.com> - 2011-04-15 08:44 -0500
Re: looking for an "inversion" pattern 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-16 13:20 -0500
Re: looking for an "inversion" pattern 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-16 13:43 -0500
Re: looking for an "inversion" pattern Jesús Gabriel y Galán <jgabrielygalan@gmail.com> - 2011-04-15 02:45 -0500
Re: looking for an "inversion" pattern Brian Candler <b.candler@pobox.com> - 2011-04-16 16:14 -0500
Re: looking for an "inversion" pattern Robert Klemme <shortcutter@googlemail.com> - 2011-04-16 23:40 +0200
csiph-web