fix: New()/Array() 正确处理 Nil 及已经是 R 的元素,不再 panic/重复包装
New(nil) 之前会 panic,现在返回 Nil(新增的 R 空实现单例,所有操作都是
安全的空操作/零值,不用调用方每次都判空)。New([]R{...}) 和 Array() 遇到
元素本身已经是 R(包括 Nil)时直接透传,不再重新拿 reflect.Value 包一层,
避免丢失原有的空值语义或类型信息。
This commit is contained in:
@@ -58,6 +58,19 @@ type R interface {
|
||||
// 也支持 interface 类型以及部分基础类型(string/bool/float),会自动解析到实际类型
|
||||
// 返回一个 R 接口实例,可用于访问和操作嵌套的字段、元素和键值对
|
||||
func New(v any) R {
|
||||
switch t := v.(type) {
|
||||
case nil:
|
||||
return Nil
|
||||
case R:
|
||||
return t
|
||||
case []R:
|
||||
return &rfx{value: reflect.ValueOf(t)}
|
||||
default:
|
||||
if t == valuex.Nil {
|
||||
return Nil
|
||||
}
|
||||
}
|
||||
|
||||
rv, isPtr, err := normalizeInputValue(v)
|
||||
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user