Alright, that is counter-intuitive too, so I might as well explain.
A Number object represents a, well, number. This number is the result of a virtual die roll.
A List object represents a list of numbers (therefore Number objects indeed), or rather a series of die roll results. So yes, List HAS-A Number is true as well. But in certain circumstances, this List has to behave as if it were a Number.
For example, if I roll three dice, and then want to add 2 (the number 2) to the total result, I would need the sum of the two dice. This is when the List object should behave like a Number.
Now, a completely valid question would be: why would you want to store the result of each individual die? Why not adding them together right away?
There is an explanation for that too, you know. Imagine the same dice roll (three dice), but I only want to use the two best ones and discard the third. In this case, the List truly is a list, and not a mere number. It makes sense to store the individual results and not the total sum of the roll.
Conclusion
To answer your question: yes, list HAS-A number, but also list IS-A number (subclass).
Or do I get it wrong?
| [reply] |
If you have to explain then it doesn't make sense. This is a little like Corion's How to best pass on the context / wantarray? issue: you have to know subtle stuff beyond the immediate context to understand the code. In fact, if you don't know that stuff you may get completely the wrong idea about what the code is doing.
In this case I'd be inclined to add a member to List that calculates the total for the list. Then The code explains itself:
my $total = $list->total ();
doesn't leave much room for ambiguity.
DWIM is Perl's answer to Gödel
| [reply] [d/l] |
That sounds a lot like diotalevi's idea.
Ok, maybe I am going for this approach.
| [reply] |
| [reply] |
Actually, you're right.
However, both List and Number are values (I aim for the Stating The Obvious Awards) on which a number of equivalent operations can be performedm such as add, substract, multiply, divide). Would it make sense to have a common superclass for List and Number then?
If yes, then let's assume this superclass is called Value.
Would I name the other classes Value::Number and Value::List, or do I just name the three classes Value, Number, and List?
| [reply] |
If this were a b&d language, you'd have both Number and NumberSet implement an interface
which simply defines one method returning the "current"/"total" numeric value.
Because this is Perl, you only need to have the two
classes implement that method, without any explicitly defined interface.
Then, in any situation where you'd call that method, as long as the object is of one
class or the other, you're good to go.
And certainly, from what you've told us, the two classes don't
need to be related in the class hierarchy at all.
We're building the house of the future together.
| [reply] |
I'm not as expert as you on classes, but I wasn't thrown by List IS-A Number. What about numbers in vector spaces, which are common in physics and enginering? A unique vector space number could be represented by (4,5,6).
I'm not really a human, but I play one on earth.
flash japh
| [reply] |