Why don't these writable atributes work?

E

Edward

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
 
M

Marcin Mielżyński

Edward said:
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
 
F

Farrel Lifson

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

'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
 
R

Robert Klemme

Edward said:
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)

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
 

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
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top