GavinBaumanis (10) [Avatar] Offline
#1
Hi There,
On Page 45, in the section, Deifing immutable objects with Scala;
Is the following code snippet;

override def toString() = {
title + “($”+p+“)”
}

My question is; why?
I understand the code - but why would you alter the behaviour of an esiting / built-in / standard method? Would you you just not create a whole new one with an appropriate name?

From an ongoing maintenance perspective - wouldnt it add confusion, having standard methods, do non-standard things?

I appreciate also, it might just be an example "just" to show the syntax - as elluded to in the "comments" for the code... But to save people questioning, perhaps you could add something like; " You would probably never do this - but to show you the syntax..." - or similar.

perhaps - I have just been living under a rock for too long and it is common-place to override standard methods?

Gavin.
jfs.world (109) [Avatar] Offline
#2
Re: Overide toString Method
Overriding 'toString' does make for friendlier output from the REPL. If you want to see what the standard (I think the better way to think of it would be as a "provided skeleton function", instead of a "standard function" in this case) toString does, you can define another similar class, but without the overridden 'toString', and then compare the two outputs:

class PlainBook(t:String, p:Price) {
    val title = t
    val price = p
}
val book2 = new PlainBook("Some book", 10)
book2: StrBook = StrBook@9556cd94


I dont think toString is that crucial a method that overriding it will cause any issues. Scala certainly doesnt rely on it to do its own memory tracking! It has its own internal mechanisms which I doubt you'll be able to override by merely redefining a function....