d - D 中的参数化类型和返回值为什么不起作用?

标签 d return-type parameterized-types

好的,看来我之前的问题现在已经解决了(我将其留在下面以供引用)。然而,又一个问题出现了——再次,似乎是我错过的东西。在此代码中,我声明了以下内容:

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);
    }
}

编译器抗议nearest.left 和nearest.right 不是属性,尽管nearest 是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 编译器。

最佳答案

我看到的唯一错误是函数参数中缺少 !:

BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {

应该是

BinaryTree!(T) findNearest (BinaryTree!(T) x, T key) {

其余部分对我来说看起来不错。

关于d - D 中的参数化类型和返回值为什么不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090252/

相关文章:

d - 是否可以在内联函数中指定 extern?

documentation - 使用 dub 构建文档

swift - 将变量从 Gesture Recognizer 函数传递到 IBAction

typescript - 异步方法的返回类型

Java 对象转换不能像我需要的那样工作

java - getActualTypeArguments 与父级,从子级获取其参数化类型

network-programming - D 中的分布式消息传递?

sockets - D套接字编程基本连接脚本

php - 如何记录一个实现多个接口(interface)的类?

haskell - Haskell中由常量参数化的数据类型