Wso2 带迭代器对象的Ballerina范围表达式实现问题。不兼容类型错误

Wso2 带迭代器对象的Ballerina范围表达式实现问题。不兼容类型错误,wso2,ballerina,Wso2,Ballerina,我试图通过示例来理解这个示例代码在《芭蕾舞演员》中的工作方式。我用的是芭蕾舞演员1.0.5 我在}iterableObj=25..

我试图通过示例来理解这个示例代码在《芭蕾舞演员》中的工作方式。我用的是芭蕾舞演员1.0.5

我在
}iterableObj=25..<28行遇到了一个问题其中我得到一个不兼容类型的错误。我尝试了各种方法来复制它需要的类型,包括在独占和独占记录描述符之间切换,但我似乎无法找到它。我对这门语言也不熟悉

当我运行下面的代码时。它给我的错误如下:

错误 错误:.::range_expressions.bal:20:21:不兼容类型:应为“object{public function}迭代器()返回(object{public function next()返回(record{int value;|};})}”,找到“object{public function next()返回(record{int value;|?}})”

代码
导入芭蕾舞演员/io;
公共功能main(){
io:println(“foreach for 25…28”);
foreach int i在25…28{
io:println(i);
}
io:println(“\n达到25..<28”);
foreach int i在25..<28{
io:println(i);
}
抽象对象{
公共函数uu迭代器()返回
抽象对象{
公共函数next()返回记录{| int value;|}?;
};
}iterableObj=25..<28;//这里面临一个问题
抽象对象{
公共函数next()返回(记录{| int value;|});
}迭代器=iterableObj._迭代器();
io:println(“25..<28的不可操作对象”);
while(true){
记录{| int value;|}?r=iterator.next();
if(r是记录{| int value;|}){
io:println(r.值);
}否则{
打破
}
}
}
杂项。信息 我对这个例子也有类似的问题。当我尝试执行该示例中的代码时,我也会遇到一个不兼容的类型错误,我认为根本的问题是迭代器对象的实现。我不认为我应该在这里发布代码,否则问题看起来太长了

根据信息:

抽象对象{public next()的任何子类型返回记录{T value;|}?},称为迭代器

主要问题
我已经经历了我能从中收集到的东西,但我似乎无法理解这一点。您能告诉我如何修复此错误吗?如果可能,请对示例的工作方式进行一个小的解释?

我认为问题在于您尝试实现的代码是1.1.0版本中的新添加,1.1.0于2019年12月19日发布

您可以下载1.1.0或使用网站中的版本选择器获取1.1.0之前的文档。在网页的右上角应该有一个版本选择器,从那里你可以选择1.0来获取1.0.5编译器的文档

编辑:
网站中似乎存在一个bug,通过示例阻止您访问版本化的Ballerina。现在请使用它们的源代码

谢谢。你的回答有道理。就芭蕾舞演员的例子而言,网站似乎存在一个问题。它不允许您更改版本(当您选择更改时),它似乎将您踢出该部分。您可以尝试通过示例访问1.1.0之前版本的Ballerina,看看我是否弄错了。是的,网站中似乎有一个bug,目前您应该能够在github中使用Ballerina By examples来引用该语言的旧版本。
import ballerina/io;

public function main() {

    io:println("foreach for 25 ... 28");
    foreach int i in 25 ... 28 {
        io:println(i);
    }

    io:println("\nforeach for 25 ..< 28");
    foreach int i in 25 ..< 28 {
        io:println(i);
    }

    abstract object {
        public function __iterator() returns
            abstract object {
                public function next() returns record {|int value;|}?;
            };
    } iterableObj = 25 ..< 28;  // facing an issue here

    abstract object {
            public function next() returns (record {|int value;|}?);
    } iterator = iterableObj.__iterator();

    io:println("\niterable object for 25 ..< 28");
    while (true) {
        record {| int value; |}? r = iterator.next();
        if (r is record {| int value; |}) {
            io:println(r.value);
        } else {

            break;
        }
    }
}