vala迭代器next_value方法返回类型

时间:2016-01-10 03:50:17

标签: iterator vala

来自vala教程:

替代迭代器协议:" T? next_value()" 如果迭代器对象有一个返回可空类型的.next_value()函数,那么我们通过调用此函数进行迭代,直到它返回null。

我写了一些代码,但收到了错误。

错误消息:

  

错误:返回类型`Something.next_value'必须是可以为空的

     

foreach(A中的字符串s){

                     ^

我不明白,它已经在我的next_value返回类型中可以为空了。

如何更正此代码?

public static void main() {
    stdout.printf("hello\n");
    var A = new Something<string> ({"aa", "bb"});

    foreach (string s in A) {
        stdout.puts(s);
        stdout.puts ("\n");
    }

}

public class Something<T> : Object {
    public T[]  data;
    private int _size;
    private int _i = 0;

    public Something (owned T[] a){
        this.data  = a;
        this._size = data.length;
    }

    public Something<T> iterator(){
        return this;
    }

    // error: return type of `Something.next_value' must be nullable
    // foreach (string s in A) {
    //                        ^

    public T? next_value () {
        return _i < _size ? data[_i++] : null;
    }
}

1 个答案:

答案 0 :(得分:1)

您已声明通用数据类型必须可为空,这是正确的。因此,当您将特定数据类型作为类型参数传递时,请确保它也可以为空。这一行:

var A = new Something<string> ({"aa", "bb"});

应该是:

var A = new Something<string?> ({"aa", "bb"});