'This' type (original) (raw)
Marek Kozieł develop4lasu at gmail.com
Sun Mar 15 03:57:43 PDT 2009
- Previous message: 'This' type
- Next message: PRE-PROPOSAL: Source and Encoding keyword
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2009/3/15 Howard Lovatt <howard.lovatt at iee.org>
I am not sure I completely follow the proposal, but if the proposal is something like self types in Eiffel or Scala then they can have problems. In the Eiffel book, I think it is ed. 3 that has self types, they are introduced in a Skier example. The example is organising a High School Ski Trip and you don't want the boys sharing with the girls, so you want the roommate() method to have type this (self in Eiffel), so that Boy's roommmate returns a Boy and Girl's roommate() returns a Girl. Something like:
interface Skier { This roommate(); void setRoommate(This roomie); ... } class Boy implements Skier { Boy roommate() ... } class Girls implements Skier { Girl roommate() ... } Now they introduce the concept of a Ranked skier and have classes RankedBoy and RankedGirl, something like this: interface Ranked { int ranking(); } class RankedBoy extends Boy implements Ranking { RankedBoy roommate() ... } ... The problem is that now only RankedBoys can share with RankedBoys; which was not the intention in the example and is an extremely difficult to find bug. This shows that even expert programmers can make mistakes with self types. Therefore self types seem to solve some problems, but introduce others. After some time, I found the same about this.
'This' type need lots analyze and it should be split into:
'This' type :
work with inheritance
can be used in generics
but allowed only for return type (would add relation to generics)
it would be great mistake to allow 'This' as input parameter other than <? super This>
'Self' type :
- used as replacement current class.
I'll try to finish other specification that will allow return 'this' and will do interfere with potential added 'This' type.
-- Pozdrowionka. / Regards. Lasu aka Marek Kozieł
http://lasu2string.blogspot.com/
- Previous message: 'This' type
- Next message: PRE-PROPOSAL: Source and Encoding keyword
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]