能否在Pkl对象声明外部设置属性值?类方法内也无法设置?
Pkl中能否在对象声明外部或类方法内设置属性值?
Pkl的对象是不可变的,这是语言的核心设计特性之一,因此不支持在对象初始化完成后修改其属性值,不管是在对象声明外部还是类方法内部都不行。
你的代码报错原因
你尝试使用f.Bar = "Something else"这种赋值语法修改已初始化对象的属性,这违反了Pkl的不可变规则,所以会触发语法错误——Pkl根本没有设计这种修改对象属性的语法。
替代解决方案
如果需要更新对象的属性,正确的做法是基于原对象创建一个新对象,覆盖需要修改的属性:
class Foo { Bar: String } f = Foo { Bar = "Baz" } // 创建新对象,修改Bar属性 fUpdated = f { Bar = "Something else" } output { value = fUpdated }
类方法内的情况
同样,类方法内部也无法修改当前对象的属性。如果需要在方法里生成不同状态的对象,可以让方法返回一个新的对象实例:
class Foo { Bar: String updateBar(newBar: String): Foo { return this { Bar = newBar } } } f = Foo { Bar = "Baz" } fUpdated = f.updateBar("Something else") output { value = fUpdated }
内容的提问来源于stack exchange,提问作者Eric Z Beard
相关产品推荐
相关产品推荐

