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

Scala是否具有像C#的对象初始化?

发布时间:2020-12-16 09:12:24 所属栏目:安全 来源:网络整理
导读:C#中的对象初始化 var foo = new Foo() { bar = 5 }; 相当于 var foo = new Foo();foo.bar = 5; Scala是否具有像C#的对象初始化? 解决方法 scala class Foo { var bar: Int = _ }defined class Fooscala var foo = new Foo() { bar = 5 }foo: Foo = $anon$1
C#中的对象初始化

var foo = new Foo() { bar = 5 };

相当于

var foo = new Foo();
foo.bar = 5;

Scala是否具有像C#的对象初始化?

解决方法

scala> class Foo { var bar: Int = _ }
defined class Foo

scala> var foo = new Foo() { bar = 5 }
foo: Foo = $anon$1@1ed00d1

scala> var realFoo = new Foo()
realFoo: Foo = Foo@1bedb0

您可以看到语法工作(在这种情况下),但是foo没有类型Foo.它实际上是一个Foo的新子类型,它与大括号之间的任何子类化.在这种情况下只需要一个附加赋值的构造函数.

在一般情况下,确切的C#语法将无法正常工作:

scala> class Foo { var bar: Int = _; var baz: String = _ }
defined class Foo

scala> var foo: Foo = new Foo { bar = 5,baz = "bam" }
<console>:1: error: ';' expected but ',' found.
       var foo: Foo = new Foo { bar = 5,baz = "bam" }

相反,您需要键入:

scala> var foo: Foo = new Foo { bar = 5; baz = "bam" }
foo: Foo = $anon$1@1be20c

Foo构造函数将首先运行,然后匿名类型构造函数将运行.

我认为这是Kim和Alexey的评论.

我不使用C#,但似乎在C#中,这一点的语法只能用于初始化字段,而在Scala中,决定使用这种语法来扩展类,就像Java一样.

(编辑:李大同)

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

    推荐文章
      热点阅读