首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在scala中创建新对象后的代码块

在scala中创建新对象后的代码块
EN

Stack Overflow用户
提问于 2017-01-21 14:26:08
回答 1查看 674关注 0票数 3

我有一个构造函数,定义为

代码语言:javascript
复制
class Test{ var i = 0; println("constructor"); }

我把它叫做

代码语言:javascript
复制
val t = new Test { println("codeblock"); i = 7; }

这样做的结果是:

代码语言:javascript
复制
constructor
codeblock
defined class Test
t: Test = $anon$1@4a7b4f79
res3: Int = 7

所以我看到与new在同一行上的代码块被执行,就像它是构造函数的一部分一样。我对此并不熟悉。

有人可以澄清这种行为和/或引用来解释这里起作用的语义吗?我不知道怎么用谷歌搜索这个--搜索code block on same line as constructor call scala帮不了多少忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-21 14:36:52

它大致相当于:

代码语言:javascript
复制
class Test{ var i = 0; println("constructor"); }

class TestImpl extends Test {
  println("codeblock")
  i = 7
}

scala> new TestImpl
constructor
codeblock
res8: TestImpl = TestImpl@6baf697c

scala> res8.i
res9: Int = 7

因此,您可以看到,初始化顺序从更抽象的类到更具体的类。

要突出显示@som-snytt指向Scala语言规范的评论:general instance creation expression

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

https://stackoverflow.com/questions/41776392

复制
相关文章

相似问题

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