Assignment without attr=

G

Greg Willits

Not even sure what to call this for the thread subject

I want to create a class which is a simple packed set of digits (as a
string) as the one and only attribute of the class. There will be
several methods to extract chunks from and format this string, but
there's only the one attribute.

For the life of me I can't figure out how to to populate the dang this
to start with, without have to go through an attribute. If it were a
normal multi-attribute object, I'm fine, but in light of there only
being one attribute, I'm trying to work with it a different way. Maybe
I'm just going about it all wrong to start with?

The essentials:

class PackedNumber
def initialize
@packedNumber
end

def methodX
...
end

def methodY
...
end
end

So, I'd want to work with it like this:
whatever = PackedNumber.new('12345')
Or
whatever = PackedNumber.new
whatever = '12345' # but I don't want whatever to be String

I'm trying to avoid the obvious, and maybe this is what is not possible
whatever.packedNumber = '12345'

I tried creating a method just for = but that didn't fly

def =(chars)
@packedNumber = chars
end

Feels pretty lame I can't see this, but there ya go.

-- gw
 
T

Tim Hunter

Greg said:
Not even sure what to call this for the thread subject

I want to create a class which is a simple packed set of digits (as a
string) as the one and only attribute of the class. There will be
several methods to extract chunks from and format this string, but
there's only the one attribute.

For the life of me I can't figure out how to to populate the dang this
to start with, without have to go through an attribute. If it were a
normal multi-attribute object, I'm fine, but in light of there only
being one attribute, I'm trying to work with it a different way. Maybe
I'm just going about it all wrong to start with?

The essentials:

class PackedNumber
def initialize
@packedNumber
end

def methodX
...
end

def methodY
...
end
end

So, I'd want to work with it like this:
whatever = PackedNumber.new('12345')
Or
whatever = PackedNumber.new
whatever = '12345' # but I don't want whatever to be String

I'm trying to avoid the obvious, and maybe this is what is not possible
whatever.packedNumber = '12345'

I tried creating a method just for = but that didn't fly

def =(chars)
@packedNumber = chars
end

Feels pretty lame I can't see this, but there ya go.

-- gw

maybe I'm missing something obvious here, but why not just take the
initial value as an argument to initialize?

class PackedNumber
def initialize(packed_number)
@packedNumber = packed_number
end
# other stuff
end

pn = PackedNumber.new('12345')
 
C

Chris Shea

So, I'd want to work with it like this:
whatever = PackedNumber.new('12345')

If that's all you want, you can do this:

class PackedNumber
def initialize(string)
@packednumber = string
end
end

HTH,
Chris
 
J

Justin Collins

Greg said:
Not even sure what to call this for the thread subject

I want to create a class which is a simple packed set of digits (as a
string) as the one and only attribute of the class. There will be
several methods to extract chunks from and format this string, but
there's only the one attribute.

For the life of me I can't figure out how to to populate the dang this
to start with, without have to go through an attribute. If it were a
normal multi-attribute object, I'm fine, but in light of there only
being one attribute, I'm trying to work with it a different way. Maybe
I'm just going about it all wrong to start with?

The essentials:

class PackedNumber
def initialize
@packedNumber
end

def methodX
...
end

def methodY
...
end
end

So, I'd want to work with it like this:
whatever = PackedNumber.new('12345')
def initialize(num = nil)
@packedNumber = num
end
Or
whatever = PackedNumber.new
whatever = '12345' # but I don't want whatever to be String

I don't think you can do this.
I'm trying to avoid the obvious, and maybe this is what is not possible
whatever.packedNumber = '12345'

I tried creating a method just for = but that didn't fly

def =(chars)
@packedNumber = chars
end
But you could do

def set(chars)
@packedNumber = chars
end

whatever = PackedNumber.new

whatever.set '12345'


or if you want it even shorter, less 'method-call-like'

def [] num
@packedNumber = num
end

whatever['12345']

-Justin
 
G

Greg Willits

Justin said:
or if you want it even shorter, less 'method-call-like'

def [] num
@packedNumber = num
end

whatever['12345']

Yeah, either of those (.set or [ ]) will be fine.

Tim said:
maybe I'm missing something obvious here, but why not just take the
initial value as an argument to initialize?

I want to allow assignment at initialization as you say, and an
alternate method too.

I'm just experimenting/exploring what's possible.

Thanks guys.

-- gw
 
S

Sebastian Hungerecker

Greg said:
=C2=A0 =C2=A0whatever =3D PackedNumber.new('12345')
Or
=C2=A0 =C2=A0whatever =3D PackedNumber.new
=C2=A0 =C2=A0whatever =3D '12345' =C2=A0# but I don't want whatever to be=
String

Given that there is no String#~ this would work:
class String
def ~
PackedNumber.new self
end
end

whatever =3D ~"12345"

That a "little" hackish thogh ;-)

HTH,
Sebastian
=2D-=20
NP: Milhaven - Lord Of Birds
Jabber: (e-mail address removed)
ICQ: 205544826
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,219
Messages
2,571,118
Members
47,737
Latest member
CarleyHarm

Latest Threads

Top