Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Mail Systems
Eclipse Documentation

How To Guides
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Problem Solutions
Privacy Policy




Ruby Programming
Previous Page Home Next Page

Writable Attributes

Sometimes you need to be able to set an attribute from outside the object. For example, let's assume that the duration that is initially associated with a song is an estimate (perhaps gathered from information on a CD or in the MP3 data). The first time we play the song, we get to find out how long it actually is, and we store this new value back in the Song object.

In languages such as C++ and Java, you'd do this with setter functions.

class JavaSong {                     // Java code
  private Duration myDuration;
  public void setDuration(Duration newDuration) {
    myDuration = newDuration;
s = new Song(....)

In Ruby, the attributes of an object can be accessed as if they were any other variable. We've seen this above with phrases such as So, it seems natural to be able to assign to these variables when you want to set the value of an attribute. In keeping with the Principle of Least Surprise, that's just what you do in Ruby.

class Song
  def duration=(newDuration)
    @duration = newDuration
aSong ="Bicylops", "Fleck", 260)
aSong.duration 260
aSong.duration = 257   # set attribute with updated value
aSong.duration 257

The assignment ``aSong.duration = 257'' invokes the method duration= in the aSong object, passing it 257 as an argument. In fact, defining a method name ending in an equals sign makes that name eligible to appear on the left-hand side of an assignment.

Again, Ruby provides a shortcut for creating these simple attribute setting methods.

class Song
  attr_writer :duration
aSong ="Bicylops", "Fleck", 260)
aSong.duration = 257
Ruby Programming
Previous Page Home Next Page

  Published under the terms of the Open Publication License Design by Interspire