[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: Changing self class from inside a method??

From: Michael Sokol <mikaa123@...>
Date: 2012-05-22 09:42:52 UTC
List: ruby-talk #395794
The class-oriented idiom is very strict. I.e An object is an instance of a c=
lass.

However, leaving classes behind, objects are nothing but state and behavior.=


In ruby and other purely object oriented languages, an object isn't judged o=
n it's class but on it's behavior (ducktyping).

Thus you don't need to change the class of an object ---which isn't much mor=
e than a factory to create object --- to achieve what you want.

- Mixins allows you to inject behavior to objects at runtime.
- It's possible to alter (undef) methods
- You might want to github search for Mixology
- Read about Role modeling (maybe DCI) and traits.

On May 22, 2012, at 9:03 AM, Robert Klemme <shortcutter@googlemail.com> wrot=
e:

> On Tue, May 22, 2012 at 6:43 AM, David Madison <lists@ruby-forum.com> wrot=
e:
>> Let's start off with the assumption I want a method that allows an
>> object to transform itself into another object.  In other words:
>>=20
>>=20
>> begClass =3D a.class
>> a.changeToSomethingElse(42)
>> endClass =3D a.class
>>=20
>> # Where begClass !=3D endClass
>=20
> You can't do this.
>=20
>> As a more specific example, consider some hopeful code for allowing
>> auto-creation of arrays from nil, perl-ish style:
>=20
> If you miss Perl that much you are probably using the wrong language here.=

>=20
>> class Nil
>>  def push(*els)
>>    a =3D Array.new
>>    a.push(*els)
>>    #self =3D a             # Nope!
>>    #self.class =3D Array   # Nope!
>>  end
>> end
>>=20
>> This would allow:
>>  a =3D nil
>>  a.push(1,2,3)
>>  puts "#{a.class}"
>>=20
>> I know we have things like to_a, but that requires an assigment instead
>> of just the method call.  Let's just assume we need a way to do it like
>> this.
>=20
> I am not ready to assume "that we need a way to do it like this".  The
> Ruby idiom for this is
>=20
> a =3D nil
> ...
> (a ||=3D[]).push(1,2,3)
>=20
>> Is this just considered impossible, or is there a way to change/convert
>> the class of self from inside a method?  I can imagine it would cause
>> complications the moment the class changes, since we'd suddenly be in
>> the method of the wrong class, but if any language had a way to do it, I
>> figure it'd be ruby.
>=20
> There might be a way in a C extension but actually I consider it a bad
> idea because it violates one of the basic assumptions of the language
> (i.e. that the class of an instance does not change) - and it's
> unnecessary (see above).
>=20
> What you can do is to use a proxy object like SimpleDelegator and
> change the instance it points to later.  But then you need to
> initialize the variable and if you know it's going to be an Array you
> can just as well initialize with an empty Array instance.
>=20
> Kind regards
>=20
> robert
>=20
> --=20
> remember.guy do |as, often| as.you_can - without end
> http://blog.rubybestpractices.com/
>=20

In This Thread