首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala ` `def loop():Unit = loop`,为什么永远循环?

Scala ` `def loop():Unit = loop`,为什么永远循环?
EN

Stack Overflow用户
提问于 2017-04-23 00:05:13
回答 6查看 310关注 0票数 0

在Scala中

代码语言:javascript
复制
def loop():
   Unit = loop

当你调用它的时候:

代码语言:javascript
复制
loop()

它将永远循环。我不明白为什么?

例如在Python中:

代码语言:javascript
复制
def loop():
    return loop

当你调用它的时候:

代码语言:javascript
复制
loop()

它返回

代码语言:javascript
复制
<function loop at 0x7f276e680668>

在Scala中,一切都是自动添加()的表达式吗?

代码语言:javascript
复制
println(println())

它返回一个空行:

代码语言:javascript
复制
()
EN

回答 6

Stack Overflow用户

发布于 2017-04-23 00:11:43

从Scala style guide

"Scala允许省略参数为0(无参数)的方法:

代码语言:javascript
复制
reply() 

// is the same as

reply

然而,只有当所讨论的方法没有副作用(纯函数)时,才应该使用这种语法。换句话说,在调用queue.size时可以省略括号,但在调用println()时不可以。这个约定反映了上面给出的方法声明约定。

严格遵守这一约定将极大地提高代码的可读性,并使任何给定方法的最基本操作更容易一目了然。抑制仅仅为了节省两个字符而省略括号的冲动!“

票数 2
EN

Stack Overflow用户

发布于 2017-04-23 00:12:42

您可以省略括号,它会在不带参数的情况下调用函数。它不像Python。

票数 1
EN

Stack Overflow用户

发布于 2017-04-23 00:20:22

在Scala中,不带参数的方法可以使用或不使用括号进行调用,但前提是必须使用括号进行定义。

代码语言:javascript
复制
def one() = 1
def two = 2

one    // 1
one()  // 1
two    // 2
two()  // error: Int does not take parameters

println(println())()输出略有不同。println()语句返回Unit,这是一种只有一个可能值的类型,表示为()

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

https://stackoverflow.com/questions/43561397

复制
相关文章

相似问题

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