Why don't these writable atributes work?

Both of these code examples for making class properties don’t work
although they are pretty much straight out of the book “Programming
Ruby”. What I am doing wrong here?

error is: undefined method `firstName’ for #<User:0xb7f76b24
@firstName=“Newton”> (NoMethodError)

class User

attr_writer :firstName

def initialize(firstName)
	@firstName = firstName
end

end

user = User.new(‘Hal’)
user.firstName = ‘Newton’
print user.firstName

class User

def firstName=(newFirstName)
	@firstName = newFirstName
end

def initialize(firstName)
	@firstName = firstName
end

end

user = User.new(‘Hal’)
user.firstName = ‘Newton’
print user.firstName


Thanks,

Edward Tanguay
All my projects: http://www.tanguay.info

Edward wrote:

Both of these code examples for making class properties don’t work
although they are pretty much straight out of the book “Programming
Ruby”. What I am doing wrong here?

error is: undefined method `firstName’ for #<User:0xb7f76b24
@firstName=“Newton”> (NoMethodError)

you didn’t create an attribute reader:

attr_accessor :firstName - creates both reader and writer

attr_writer :firstName - creates a writer

attr_reader :firstName - creates a reader (the one that you need)

You can also create a reader by hand:

def firstName
@firstName
end

lopex

On 17/09/06, Edward [email protected] wrote:

class User
user = User.new(‘Hal’)

‘attr_writer :firstName’ only creates the ‘firstName=’ method just
like ‘attr_reader :firstName’ will only create the ‘firstName’ method.
What you need is ‘attr_accessor :firstName’ which creates both.

Farrel

Edward wrote:

Both of these code examples for making class properties don’t work
although they are pretty much straight out of the book “Programming
Ruby”. What I am doing wrong here?

error is: undefined method `firstName’ for #<User:0xb7f76b24
@firstName=“Newton”> (NoMethodError)

class User

attr_writer :firstName

Just an additional note: the usual conventions for method and variable
identifiers in Ruby is to separate words by underscore and use camel
case only for class and module names. So that would rather be

class User
attr_accessor :first_name
end

Kind regards

robert