Pine Script含switch的数组清理函数无法识别条件问题求助
Pine Script 图形元素数组清理问题解决
问题根源在于Pine Script是静态类型语言,编译阶段会校验所有代码分支的类型合法性,哪怕运行时不会执行到这些分支。你原函数中,当传入lineArray(类型为array<line>)时,array.get(_arr, x)返回line类型,但label.delete()和box.delete()要求的是label/box类型,因此编译直接报错,和switch/if的逻辑是否生效无关。
下面提供两种可行的解决方案:
方案一:为每种类型编写专属清理函数
针对line、label、box分别创建独立函数,确保参数类型完全匹配,避免类型冲突:
// 清理存储line的数组 f_emptyLineArr(_arr) => for x = 0 to array.size(_arr) - 1 line.delete(array.get(_arr, x)) array.clear(_arr) // 可选:清空数组内的引用,释放资源 // 清理存储label的数组 f_emptyLabelArr(_arr) => for x = 0 to array.size(_arr) - 1 label.delete(array.get(_arr, x)) array.clear(_arr) // 清理存储box的数组 f_emptyBoxArr(_arr) => for x = 0 to array.size(_arr) - 1 box.delete(array.get(_arr, x)) array.clear(_arr) // 调用示例 f_emptyLineArr(lineArray) f_emptyLabelArr(labelArray) f_emptyBoxArr(boxArray)
方案二:通用清理函数(传递删除操作)
通过将元素的删除函数作为参数传入,实现逻辑复用,同时保证类型匹配:
// 通用数组清理函数:接收删除操作和目标数组 f_emptyArr(_deleteFunc, _arr) => for x = 0 to array.size(_arr) - 1 _deleteFunc(array.get(_arr, x)) array.clear(_arr) // 调用示例:直接传入对应类型的delete函数 f_emptyArr(line.delete, lineArray) f_emptyArr(label.delete, labelArray) f_emptyArr(box.delete, boxArray)
两种方案都能解决类型不匹配的问题,方案一更直观,方案二更简洁复用性强,可根据需求选择。
内容的提问来源于stack exchange,提问作者Xalladus
相关产品推荐
相关产品推荐

