首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行ceylon教程代码时出错

运行ceylon教程代码时出错
EN

Stack Overflow用户
提问于 2016-04-14 05:32:05
回答 2查看 56关注 0票数 1

我遵循这个tutorial,它给了我这个代码:

代码语言:javascript
复制
"Run the module `hello.ceylon`."
shared void run() {
    process.write("Enter a number (x): ");
    value userX = process.readLine();
    value x = parseFloat(userX);
    process.write("Enter a number (y): ");
    value userY = process.readLine();
    value y = parseFloat(userY);

    if (exists x, exists y) {
        print("``x`` * ``y`` = ``x * y``");
    } else {
        print("You must enter numbers!");
    }
}

但它给了我这样的信息:

参数必须可以赋值给parseFloat的参数字符串: String?不能赋值给字符串

我已经复制/粘贴了这段代码,但仍然是相同的消息。

EN

回答 2

Stack Overflow用户

发布于 2016-04-14 14:30:00

我是本教程的作者。

我非常抱歉这个示例代码不再工作了(它在Ceyl1.0.0上工作,见下文)。

我已经在教程中修复了它,并在Ceylon Web IDE中创建了一个runnable sample,您可以使用它来尝试。

基本上,问题是,正如Lucas Werkmeister指出的那样,readLine()返回一个等同于String|NullString?,因为它可能无法从输入(用户的键盘)中读取任何内容,在这种情况下,您将获得null

代码示例适用于Ceylon1.0.0,因为readLine()过去常常返回一个String

因此,对于要编译的代码,您需要确保检查您得到的exists (即.不是null):

代码语言:javascript
复制
value userX = process.readLine();
value x = parseFloat(userX else "");

当你做userX else ""时,你告诉锡兰,如果userX存在,它应该使用它,如果不存在,使用""。这样,我们总能得到一个String

整个代码片段应该如下所示(参见上面链接的示例):

代码语言:javascript
复制
process.write("Enter a number (x): ");
value userX = process.readLine();
value x = parseFloat(userX else "");
process.write("Enter a number (y): ");
value userY = process.readLine();
value y = parseFloat(userY else "");

if (exists x, exists y) {
    print("``x`` * ``y`` = ``x * y``");
} else {
    print("You must enter numbers!");
}

感谢您报告错误!希望您喜欢本教程的其余部分。

票数 3
EN

Stack Overflow用户

发布于 2016-04-14 05:50:44

process.readLine()返回一个String?,如果可以读取一行,则返回String;如果不能读取一行,则返回null (例如,流结束)。parseFloat需要非可选的String:不允许使用parseFloat(null)。所以你必须通过assert确认userX的存在:

代码语言:javascript
复制
assert (exists userX = process.readLine());

代码语言:javascript
复制
value userX = process.readLine();
assert (exists userX);

这两种形式都使userX成为非可选变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36609961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档