加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala中的所有东西都是函数或表达式或对象吗?

发布时间:2020-12-16 08:52:43 所属栏目:安全 来源:网络整理
导读:我很迷惑. 我认为一切都是表达式,因为语句返回一个值.但我也听说scala中的所有东西都是一个对象. 实际上是什么?为什么scala选择以某种方式做到这一点?这对scala开发人员意味着什么? 解决方法 I thought everything is expression because the statement r
我很迷惑.

我认为一切都是表达式,因为语句返回一个值.但我也听说scala中的所有东西都是一个对象.

实际上是什么?为什么scala选择以某种方式做到这一点?这对scala开发人员意味着什么?

解决方法

I thought everything is expression because the statement returns a value.

有些东西没有价值,但在大多数情况下,这是正确的.这意味着我们基本上可以放弃Scala中“statement”和“expression”之间的区别.

然而,术语“返回值”并不合适.我们说一切都“评估”到一个价值.

But I also heard that everything is an object in scala.

这与前面的语句完全不矛盾:)它只是意味着每个可能的值都是一个对象(所以每个表达式都会计算一个对象).顺便说一下,作为Scala中的一等公民的功能也是对象.

Why did scala choose to do it one way or the other?

必须注意的是,这实际上是Java方式的一般化,其中语句和表达式是不同的东西,而不是一切都是对象.你可以将每一段Java代码翻译成Scala而不需要很多改编,但不是相反.因此,这个设计决策使得Scala在简洁性和表现力方面实际上更加强大.

What does that mean to a scala developer?

例如,这意味着:

>您通常不需要返回,因为您可以将返回值作为方法中的最后一个表达式
>您可以利用if和case是表达式来缩短代码的事实

一个例子是:

def mymethod(x: Int) = if (x > 2) "yay!" else "too low!"

// ...
println(mymethod(10))  // => prints "yay!"
println(mymethod(0))   // => prints "too low!"

我们还可以将这样的复合表达式的值赋给变量:

val str = value match {
            case Some(x) => "Result: " + x
            case None    => "Error!"
          }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读