繁体   English   中英

Pine Script v5 编译器报告“未声明的标识符”

[英]Pine Script v5 compiler report "undeclared identifier"

像这样的代码:

//@version=5
indicator("My script")

x = if open > close
    var a = 10
    var b = 20
    a := 20
    b := 30
    (a+b)[1]
plot(x)

(a+b)[1] 中的编译器报告“a”和“b”是未声明的标识符:

line 11: Undeclared identifier 'a';
line 11: Undeclared identifier 'b'

但是如果将 expr '(a+b)[1]' 修改为 'a+b',则在块中声明了 'a' 和 'b',编译成功。 编译器是如何工作的?

就我而言,编译器在第 11 行(在else分支中)专门用a报告了这个问题。 在这种情况下,会出现错误,因为a变量是在if分支中声明的,而在else分支中根本不存在。

为此,您需要在if/else条件之外声明。 这是重写此代码的一种可能方法:

//@version=5
indicator("My script")

f() =>
    var a = 10
    var b = 20
    if open > close
        a := 20
        b := 30
        (a+b)[1]
    else
        a
x = f()
    
plot(x)

很多时候,编译器消息与问题不完全匹配,您必须猜测它试图说什么。

在这种情况下,从逻辑上讲,声明不应在“if”部分中,因为在脚本中的任何地方都可以访问变量,因此您必须在最低级别声明它们。

You can use it like (a[1]+b[1]) right in the meantime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM