mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-02-02 13:41:48 +01:00
🧑💻 replace reflect.DeepEqual with custom func for arg comparison. (#16884)
This commit is contained in:
parent
fb5d170df2
commit
30bf687d1b
1 changed files with 85 additions and 1 deletions
|
|
@ -91,7 +91,7 @@ func containTask(task *Task, tasks []*Task) bool {
|
|||
}
|
||||
|
||||
for i, arg := range t.Args {
|
||||
if !reflect.DeepEqual(arg, task.Args[i]) {
|
||||
if !areArgsEqual(arg, task.Args[i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
@ -101,6 +101,90 @@ func containTask(task *Task, tasks []*Task) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// areArgsEqual 比较两个参数是否相等
|
||||
func areArgsEqual(a, b interface{}) bool {
|
||||
|
||||
// 如果两个参数都为 nil
|
||||
if a == nil && b == nil {
|
||||
return true
|
||||
}
|
||||
if a == nil || b == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// 快速处理常见的基本类型
|
||||
switch av := a.(type) {
|
||||
case string:
|
||||
if bv, ok := b.(string); ok {
|
||||
return av == bv
|
||||
}
|
||||
case int:
|
||||
if bv, ok := b.(int); ok {
|
||||
return av == bv
|
||||
}
|
||||
case int64:
|
||||
if bv, ok := b.(int64); ok {
|
||||
return av == bv
|
||||
}
|
||||
case int32:
|
||||
if bv, ok := b.(int32); ok {
|
||||
return av == bv
|
||||
}
|
||||
case bool:
|
||||
if bv, ok := b.(bool); ok {
|
||||
return av == bv
|
||||
}
|
||||
case float64:
|
||||
if bv, ok := b.(float64); ok {
|
||||
return av == bv
|
||||
}
|
||||
case float32:
|
||||
if bv, ok := b.(float32); ok {
|
||||
return av == bv
|
||||
}
|
||||
case uint:
|
||||
if bv, ok := b.(uint); ok {
|
||||
return av == bv
|
||||
}
|
||||
case uint64:
|
||||
if bv, ok := b.(uint64); ok {
|
||||
return av == bv
|
||||
}
|
||||
case uint32:
|
||||
if bv, ok := b.(uint32); ok {
|
||||
return av == bv
|
||||
}
|
||||
case []string:
|
||||
if bv, ok := b.([]string); ok {
|
||||
if len(av) != len(bv) {
|
||||
return false
|
||||
}
|
||||
for i := range av {
|
||||
if av[i] != bv[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
case []int:
|
||||
if bv, ok := b.([]int); ok {
|
||||
if len(av) != len(bv) {
|
||||
return false
|
||||
}
|
||||
for i := range av {
|
||||
if av[i] != bv[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// 未处理的复杂类型,回退到 reflect.DeepEqual
|
||||
return reflect.DeepEqual(a, b)
|
||||
}
|
||||
|
||||
|
||||
func getCurrentTasks() (ret []*Task) {
|
||||
queueLock.Lock()
|
||||
defer queueLock.Unlock()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue