Chapel中如何检查类的整数字段是否已设置?编译报错求解
检查类整数字段是否已设置的正确方法
嘿,我来帮你搞定这个问题!你的代码编译报错主要有两个原因:
- 首先,在支持空安全的语言(比如Dart、Swift这类)中,非空类型的字段必须在声明或构造阶段初始化,你声明的
int age是非空类型,但没给初始值,编译器会直接报错。 - 其次,不同语言的空值关键字不一样,比如Dart用
null而不是nil,Swift才用nil,你得对应自己使用的语言调整。
正确的实现思路
核心是把整数字段设置为可空类型,这样它默认会处于空值状态(代表未设置),之后就能通过检查空值来判断字段是否已被赋值。
修正后的代码示例(以Dart为例)
class BounceHouse { int? age; // 声明为可空int类型,默认值为null(未设置状态) } void main() { var v = BounceHouse(); if (v.age != null) { print("age has been set"); } else { print("age hasn't been set yet"); } v.age = 17; // 设置字段值 if (v.age != null) { print("now age is set to: ${v.age}"); } }
如果是Swift语言,代码会是这样:
class BounceHouse { var age: Int? // 可空Int类型,默认nil } let v = BounceHouse() if v.age != nil { print("not nil") } v.age = 17
额外说明
如果你不想用可空类型,也可以给字段设置一个特殊的默认值(比如-1,前提是这个值不会出现在正常业务逻辑里),然后通过判断是否等于这个默认值来判断是否已设置,但这种方法不如可空类型直观安全,更推荐用可空类型的方案。
内容的提问来源于stack exchange,提问作者Brian Dolan
相关产品推荐
相关产品推荐

