best approach to code hierarchical classes ?
someone
someone at somewhere.com
Tue Jun 8 02:37:44 UTC 2021
On Tuesday, 8 June 2021 at 02:05:27 UTC, Paul Backus wrote:
> Your module and class are both named `classComputers`, with an
> `s` at the end. You should change one of the to have a
> different name so that there's no ambiguity.
dmd output:
./dm.d(49): Error: undefined identifier `classComputer` in module
`dmclassescomputers`, did you mean class `classComputers`?
./dm.d(50): Error: undefined identifier `classComputer` in module
`dmclassescomputers`, did you mean class `classComputers`?
./dm.d(51): Error: undefined identifier `classComputer` in module
`dmclassescomputers`, did you mean class `classComputers`?
./dm.d(53): Error: no property `outer` for type
`dmclassescomputer.classComputer`
file [dm.d] as following:
```d
import dmclassescomputers = dmclassescomputers;
///import dmclassescomputer = dmclassescomputer;
import std.string;
import std.stdio;
void main (
) {
auto lobjComputers = new
dmclassescomputers.classComputers(r"lab"c);
lobjComputers ~= lobjComputers.new
dmclassescomputers.classComputer(r"dell"c); /// <- line 49
lobjComputers ~= lobjComputers.new
dmclassescomputers.classComputer(r"ibm"c);
lobjComputers ~= lobjComputers.new
dmclassescomputers.classComputer(r"apple"c);
lobjComputers[1].name = r"lenovo"c;
foreach(lobjComputer; lobjComputers) { writeln(r"["c ~
lobjComputer.outer.network ~ r" network has "c ~
lobjComputer.name ~ r"]"c); }
}
```
file [dmclassescomputers.d] as following:
```d
module dmclassescomputers;
import std.string;
class classComputers {
classComputers lhs;
classComputers rhs;
int opApply(int delegate(dmclassescomputer.classComputer) dg)
{ /// boilerplate code to handle the class's default collection
int lintResult = 0; /// must find a better name
foreach (lobjComputer; computers) { /// looping over the
computers starting in current node
lintResult = dg(lobjComputer); /// passing single object to
the loop body
if (lintResult != 0) { break; }
}
if (lintResult != 0 && lhs ! is null) { lintResult =
lhs.opApply(dg); } /// recursing child nodes
if (lintResult != 0 && rhs ! is null) { lintResult =
rhs.opApply(dg); } /// recursing child nodes
return lintResult;
}
public dmclassescomputer.classComputer[] computers; alias
computers this; /// ie: default property
private string pstrNetwork;
final @property string network() { return this.pstrNetwork; }
final @property void network(in string lstrNetwork) {
this.pstrNetwork = lstrNetwork.strip(); }
this(
string lstrNetwork
) {
this.network = lstrNetwork;
}
import dmclassescomputer;
}
```
file [dmclassescomputer.d] as following:
```d
module dmclassescomputer;
import std.string;
class classComputer {
private string pstrName;
final @property string name() { return this.pstrName; }
final @property void name(in string lstrName) { this.pstrName
= lstrName.strip(); }
this(
string lstrName
) {
this.name = lstrName;
}
}
```
More information about the Digitalmars-d-learn
mailing list