fix: New()/Array() 正确处理 Nil 及已经是 R 的元素,不再 panic/重复包装
New(nil) 之前会 panic,现在返回 Nil(新增的 R 空实现单例,所有操作都是
安全的空操作/零值,不用调用方每次都判空)。New([]R{...}) 和 Array() 遇到
元素本身已经是 R(包括 Nil)时直接透传,不再重新拿 reflect.Value 包一层,
避免丢失原有的空值语义或类型信息。
This commit is contained in:
@@ -518,7 +518,14 @@ func (r *rfx) Array() []R {
|
||||
|
||||
result := make([]R, v.Len())
|
||||
for i := 0; i < v.Len(); i++ {
|
||||
result[i] = &rfx{value: v.Index(i)}
|
||||
elem := v.Index(i)
|
||||
if elem.Kind() == reflect.Interface && !elem.IsNil() {
|
||||
if r, ok := elem.Interface().(R); ok {
|
||||
result[i] = r
|
||||
continue
|
||||
}
|
||||
}
|
||||
result[i] = &rfx{value: elem}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user