From ff1bd51f52b02095b1050a16b1b34e01639e983d Mon Sep 17 00:00:00 2001 From: xRain Date: Mon, 17 Aug 2026 11:20:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20isNoneValue=20=E8=AF=AF=E5=88=A4?= =?UTF-8?q?=E9=9D=9E=20Option=20=E5=80=BC=E4=B8=BA=20None=EF=BC=88ignoreNu?= =?UTF-8?q?ll=20=E6=97=B6=E6=89=80=E6=9C=89=E5=AD=97=E6=AE=B5=E8=A2=AB?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 原实现 unwrapOptionValue(v).isNone() 把「非 Option」也返回 None → isNone()=true - 改为直接检查 EnumTypeInfo.destruct 构造器名是否 None,非枚举返回 false - 新增 None 字段测试(remark → null;ignoreNull=true 时省略 remark 保留其他) --- src/json/JsonWriter.cj | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/json/JsonWriter.cj b/src/json/JsonWriter.cj index 30549ae..1245541 100644 --- a/src/json/JsonWriter.cj +++ b/src/json/JsonWriter.cj @@ -151,9 +151,13 @@ public class JsonWriter { } } - /// 判断 Any 值是否为 None(Option 枚举的 None 构造器) + /// 判断 Any 值是否为 None(Option 枚举的 None 构造器;非 Option 值返回 false) private static func isNoneValue(v: Any): Bool { - unwrapOptionValue(v).isNone() + if (let et: EnumTypeInfo <- TypeInfo.of(v)) { + let (ctor, _) = et.destruct(v) + return ctor.name == "None" + } + false } /// 若值为 Option 的 Some(x) 返回 Some(x);None 或非 Option 返回 None