好的,看起來我以前的問題現在已經解決了(我把它留在下面作爲參考)。然而,又一個人出現 - 再一次,似乎我失蹤了。另外在這片代碼,我宣佈: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