好的,看起来我以前的问题现在已经解决了(我把它留在下面作为参考)。然而,又一个人出现 - 再一次,似乎我失踪了。另外在这片代码,我宣布:D中的参数化类型和返回值为什么这不起作用?
private:
T _data;
BinaryTree!(T) _left;
BinaryTree!(T) _right;
然后在此之后,我说过这些:
public:
@property T data() {return _data;}
@property BinaryTree!(T) left() {return _left;}
@property BinaryTree!(T) right() {return _right;}
然后,我实现了以下功能:
void add (T data) {
BinaryTree!(T) nearest = findNearest(this, data);
if (nearest.data > data) {
nearest.left = new BinaryTree!(T) (data);
}
else {
nearest.right = new BinaryTree!(T) (data);
}
}
编译器是抗议最近的。左侧和最近的右侧不属性,尽管最近的是BinaryTree!(T),但这似乎很奇怪。我错过了什么?
老问题:
我最近得到进入d,并试图建立一个二叉树实现作为测试的方式是什么我已经阅读关于它的经验教训。现在,我开始通过如下声明它:
class BinaryTree(T)
我估计这将让我的一些参数化的类包含的东西。更具体地讲:
T _data;
BinaryTree!(T) _left;
BinaryTree!(T) _right;
现在,我又试图写这样的:
BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {
if (x.hasNoChildren || x.data == key) {
return x; //found it
}
else {
auto compare = x.data;
if (compare > key) {
return find (x.left, key);
}
else {
return find (x.right, key);
}
}
}
在此之后,编译器大声抱怨没有返回类型我的功能。我在这里做错了什么?如果它有助于解释,我来自Java背景,并且我在Xamarin Studio中使用了dmd编译器。
写setters和一切都会工作。例如:'@property void left(BinaryTree!(T)left){_left = left; }' – sigod
谢谢你。为什么这样,出于兴趣?我对'@ property'的理解是,我们可以调用像'tree.left'而不是'tree.getLeft()',这就是为什么我不确定为什么要使用'@ property' _setters_。 –
而'tree.left = new_left;'为'tree.setLeft(new_left);'。 http://dlang.org/property.html滚动到底部。 – sigod