Pinescript - 自定义方法是否内联?
Pinescript - are custom methods inlined?
我在试验 var
和自定义方法时发现了一些有趣的行为:
//@version=4
study("My Script")
x = 1
y = 1
function() =>
var k = bar_index
k
if close < open
x := function()
y := function()
plot(x)
plot(y, color=color.green)
通过设置 var k = bar_index
,它在调用时将 k
的值设置为第一个柱索引。它在 y := function()
中首先被调用,这导致 k 被设置为 0
。但是,当 x := function()
再次调用时,k 的值似乎为 9,但 x 的值仍然为 0(如图中所示),表明函数是内联的。这是真的吗,因为文档中没有提到这一点?
对同一函数的每次调用都会保留不同的历史记录,因此效果类似于内联函数。在 usrman.
中有解释 here
至于var
,它只在第一次执行时初始化变量。虽然在大多数情况下这将出现在数据集的第一个柱上,但如果在执行受限的本地块中使用声明语句,它只会在该语句在该块中首次执行时初始化变量,例如:
if barstate.isrealtime
var int a = bar_index
只会在实时柱上第一次执行脚本时初始化变量,因此 a
将是该柱的 bar_index
。
我在试验 var
和自定义方法时发现了一些有趣的行为:
//@version=4
study("My Script")
x = 1
y = 1
function() =>
var k = bar_index
k
if close < open
x := function()
y := function()
plot(x)
plot(y, color=color.green)
通过设置 var k = bar_index
,它在调用时将 k
的值设置为第一个柱索引。它在 y := function()
中首先被调用,这导致 k 被设置为 0
。但是,当 x := function()
再次调用时,k 的值似乎为 9,但 x 的值仍然为 0(如图中所示),表明函数是内联的。这是真的吗,因为文档中没有提到这一点?
对同一函数的每次调用都会保留不同的历史记录,因此效果类似于内联函数。在 usrman.
中有解释 here至于var
,它只在第一次执行时初始化变量。虽然在大多数情况下这将出现在数据集的第一个柱上,但如果在执行受限的本地块中使用声明语句,它只会在该语句在该块中首次执行时初始化变量,例如:
if barstate.isrealtime
var int a = bar_index
只会在实时柱上第一次执行脚本时初始化变量,因此 a
将是该柱的 bar_index
。