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
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)
‘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.
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.