如何在PineScript中将tuple(元组)作为函数输入参数使用
关于PineScript tuple作为函数入参的问题解答
问题1:是否可以实现tuple作为自定义函数入参?
PineScript目前没有开放普通用户自定义函数接收tuple类型参数的能力,内置security等函数对tuple的支持是官方底层做了特殊适配,无法复用到用户自定义函数中。
可以用以下两种方案实现等效需求:
方案1:展开tuple传参
将函数定义为接收tuple内的单个元素作为参数,调用时直接提取tuple对应位置的元素传入:
// 函数定义改为接收独立参数 aFunction(x1, y1, x2, y2) => x = x1 + x2 // 替换为你的实际计算公式 y = y1 + y2 // 替换为你的实际计算公式 [x, y] // 调用时展开tuple C1 = [a, b] C2 = [c, d] [wX, wY] = aFunction(C1[0], C1[1], C2[0], C2[1])
方案2:用array替代tuple传参
如果分组内元素数量多,不想写太多参数,可以用数组封装分组数据,函数接收array类型参数后内部读取元素:
aFunction(arr1, arr2) => x1 = arr1.get(0) y1 = arr1.get(1) x2 = arr2.get(0) y2 = arr2.get(1) x = x1 + x2 y = y1 + y2 [x, y] // 调用时用数组封装分组数据 C1 = array.new_float(2, 0) C1.set(0, a) C1.set(1, b) C2 = array.new_float(2, 0) C2.set(0, c) C2.set(1, d) [wX, wY] = aFunction(C1, C2)
问题2:如何对函数入参分组增强可读性?
推荐优先使用PineScript v5支持的自定义类型实现参数分组,完全符合你想要的代码清晰性需求,写法如下:
// 定义分组结构的自定义类型 type Point float x float y // 函数直接接收自定义类型作为参数 aFunction(Point p1, Point p2) => x = p1.x + p2.x y = p1.y + p2.y Point.new(x, y) // 调用代码简洁清晰 C1 = Point.new(a, b) C2 = Point.new(c, d) w = aFunction(C1, C2) // 读取结果直接访问属性即可:w.x、w.y
如果不想用自定义类型,也可以给函数参数加上带分组标识的命名,调用时显式指定参数名,避免长参数串混淆:
// 参数名带分组标识 aFunction(xy1_x, xy1_y, xy2_x, xy2_y) => x = xy1_x + xy2_x y = xy1_y + xy2_y [x, y] // 调用时显式指定参数名,含义一目了然 [wX, wY] = aFunction(xy1_x: C1[0], xy1_y: C1[1], xy2_x: C2[0], xy2_y: C2[1])
内容的提问来源于stack exchange,提问作者Edgar Brown
相关产品推荐
相关产品推荐

