为何Pine Script函数返回值对[a,b]生效对[c,d]失效?
为何Pine Script中函数返回值对
[c,d]赋值失效? 这个问题的根源是Pine Script v4的语法限制:多重解构赋值仅支持使用=运算符,而:=只能用于单个变量的更新操作,哪怕是针对var声明的持久化变量也不例外。
咱们拆解下你的代码:
[a,b] = f(20)能正常工作,是因为a和b是未提前声明的变量,Pine Script会自动推断类型,=运算符原生支持把函数返回的数组直接解构赋值给多个变量。[c,d] := f(30)失效,是因为你尝试用:=做多重解构赋值,但Pine Script v4根本不支持这种写法——:=只能单独给一个变量赋值,比如c := f(30)[0],没法一次性把数组里的多个值分给已声明的变量。
解决方法(支持6个及以上返回值)
如果要给多个var变量批量赋值,又想保持代码整洁,可以先把函数返回的数组存到一个临时变量里,再按索引逐个提取赋值:
//@version=4 study("Functions test") // 声明需要持久化的变量 var int c = na var int d = na var int e = na var int f = na var int g = na var int h = na // 示例:返回6个值的函数 f_multi(x) => [x, x+5, x+10, x+15, x+20, x+25] // 普通变量的多重赋值(正常生效) [a,b,c1,d1,e1,f1] = f_multi(20) // var变量的批量赋值:先存临时数组,再逐个提取 temp_arr = f_multi(30) c := temp_arr[0] d := temp_arr[1] e := temp_arr[2] f := temp_arr[3] g := temp_arr[4] h := temp_arr[5] plot(a) plot(b) plot(c) plot(d) plot(e) plot(f)
这种写法既符合Pine Script的语法要求,又能通过单行临时变量赋值+后续索引提取的方式,保持代码的可读性,完全适配你需要返回6个及以上变量的场景。
内容的提问来源于stack exchange,提问作者Bjorn Mistiaen
相关产品推荐
相关产品推荐

