【发布时间】:2021-06-01 23:11:35
【问题描述】:
当 pinescript 只做:
var col = 1
col := col == -1 and VarA > VarB ? 1 : col == 1 and VarA < VarB ? -1 : col
自初始化为 1 以来,“col == -1”如何为真?
【问题讨论】:
标签: pine-script
当 pinescript 只做:
var col = 1
col := col == -1 and VarA > VarB ? 1 : col == 1 and VarA < VarB ? -1 : col
自初始化为 1 以来,“col == -1”如何为真?
【问题讨论】:
标签: pine-script
您可以在this website 上将任何ternary (?:) 构造转换为if-then-else
你的例子
col == -1 and VarA > VarB ? 1 : col == 1 and VarA < VarB ? -1 : col
产生这个
if (col == -1 and VarA > VarB) {
1
} else {
if (col == 1 and VarA < VarB) {
-1
} else {
col
}
}
假设您在问题中指的是var col = 1 而不是var dir = 1,col 获得 -1 值的唯一方法是 VarA < VarB。
细分
在第一小节
var col = 1
这会将col 初始化为值1。
此初始化不会在每个柱上重复。
由于var 关键字,此初始化只进行一次。
摘自Variable declaration 的手册:
var 关键字是一个特殊的修饰符,它指示编译器只创建和初始化一次变量。
这种行为在变量的值必须通过脚本在连续柱上的迭代中保持不变的情况下非常有用。
if (col == -1 and VarA > VarB)
and 语句的第一部分产生false,因为col 是1。
所以,整个and 语句产生false。
代码继续到第一个else。
if (col == 1 and VarA < VarB)
and 语句的第一部分产生true,因为col 是1。
取决于VarA < VarB 是true 还是false,col 被分配-1 或者它自己的当前col 值。
为了争论,假设VarA < VarB 产生true。
然后,整个and 语句产生true,使if 语句true。
值-1 被分配给col。
在第二个栏
col 现在的值是 -1。
if (col == -1 and VarA > VarB)
and 语句的第一部分产生true,因为col 是-1。
如果VarA > VarB 是true,则col 被分配1。
整个语句在这里完成。
如果VarA > VarB 是false,代码继续到第一个else。
if (col == 1 and VarA < VarB)
and 语句的第一部分产生false,因为col 是-1。
所以,整个and 语句产生false。col 的当前值被分配给 col。
所以col 变量保持在-1。
【讨论】:
col 只是一个变量。 var 关键字意味着它只在第一个柱初始化一次,并在随后的柱中保持它的状态,除非被 col := 语句更改。不知道为什么你认为col 是一列。