Walter Bright wrote: > Daniel Keep wrote: >> That's true, but you haven't addressed the other side of it: property >> setters. > > Right. Consider the case where there's a pure function with no > arguments, and an overload with the same name and one argument, and no > other overloads. Wouldn't it be reasonable to take that as a property > setter? > >> With D, you would need to explicitly state which methods are properties >> manually somehow; dunno how you would, though. Especially when you >> consider subclassing and mixins. > > See my rule above - I think it'll work.
Actually, I've now come up with a counter-example for the idea of using pure at all: class Lazy(T) { private { T v; T delegate() dg; } this(T delegate() dg) { this.dg = dg; } T value() { if( dg !is null ) { v = dg(); dg = null; } return v; } } You can't make value pure, but it is supposed to be a property. One of the examples Nick gives in DIP4 is a property that accesses an SQL database; there's no way to make that pure!