Then, you probably can consider making different implementations as
"objects" and switch these objects in A at run-time.
class A
def setImpl(implementation)
@impl=implementation
end
def foo
impl.foo
end
#other methods of the interface
end
class ImplB
include B
end
class ImplC
include C
end
#at run-time
a = A.new
a.setImpl(ImplB.new)
a.foo #=> call b.foo
a.setImpl(ImplC.new)
a.foo #=> call c.foo
a.setImpl(ImplB.new)
a.foo #=> call b.foo
of course, you may need further modifications if module B accesses A's
private methods
On Sat, Dec 3, 2011 at 1:54 AM, Su Zhang <su.comp.lang.ruby / gmail.com> wrote:
> On 12/2/2011 2:51 AM, Yong Li wrote:
>>
>> BTW, what do you want to achieve, switch interface at run-time or
>> switch implementation at run-time?
>>
>
> The latter. In my example code the interface `foo' is not changed but there
> exists several implementations.
>
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Li, Yong
Fushan Road 450, Room 9A
Pudong New Area,
Shanghai, 200122
P.R.China
phone: +86-15021003368
email: gilbertly / gmail.com
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=