1. What are instance variables? class User def initialize(name, email) @name = name @email = email end end puts User.new("Peter", "[email protected]").instance_variables @name @email
class User def initialize(name, email) @name = name @email = email end def to_s "Name: #{@name}" End def send_notification notification.push(@name, @email) end end
Why so many @? class User def initialize(name, email) @name = name @email = email end def to_s "Name: #{@name}" End def send_notification notification.push(@name, @email) end end
class User attr_accessor :name, :email ... End > user = User.new("Peter Barker", "[email protected]") > puts user.name "Peter Barker" > user.name = "Peter Parker" > puts user "Peter Parker" Why so many @?
Why are instance v@rs confusing? class User def initialize(name, dob) @name = name @dob = dob calculate_age end def to_s "Name #{@name}, Age: #{@age}" end private def calculate_age @age = dob_to_age(@dob) end end
Why are instance v@rs confusing? class User attr_accessor :name, :dob, :age def initialize(name, dob) @name = name @dob = dob calculate_age end def to_s "Name #{name}, Age: #{age}" end private def calculate_age age = dob_to_age(dob) end end
class User attr_accessor :name, :dob, :age def initialize(name, dob) @name = name @dob = dob calculate_age end def to_s "Name #{name}, Age: #{age}" end private def calculate_age age = dob_to_age(dob) # this is not an instance var end end
class User def age @age end def age=(value) @age = value end def to_s "Name #{name}, Age: #{age}" end private def calculate_age age = dob_to_age(dob) # age is a local var end end
class User def age @age end def age=(value) @age = value end def to_s "Name #{name}, Age: #{age}" end private def calculate_age self.age = dob_to_age(dob) # this sends a message to self end end
class User def age @age end def age=(value) @age = value end def to_s "Name #{name}, Age: #{age}" end private def calculate_age @age = dob_to_age(dob) # ignores the method end end
class User attr_accessor :age # Get the instance variable value def to_s "Age: #{age}" "Age: #{self.age}" "Age: #{@age}" end private # Set the instance variable value def calculate_age age = dob_to_age(dob) # creates a local var self.age = dob_to_age(dob) # sends a message @age = dob_to_age(dob) # ignores the method end end Why are instance v@rs confusing?
class User def age @age end def age=(value) @age = value end def to_s "Name #{name}, Age: #{age}" end private def calculate_age age = dob_to_age(dob) # Why age = doesn’t # set the instance variable? end end
compiled = RubyVM::InstructionSequence.compile(code) puts compiled.disasm A trick learned from “Ruby Under a Microscope” http://patshaughnessy.net/ruby-under-a-microscope Get YARV instructions