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一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |