請問變數生存作用範圍(Scope)

  •   362 
  • 最後發表   FrankLi  2024 十月 24
FrankLi 發文於   2024/10/16

請問以下幾個問題,想確認XQ腳本的變數作用範圍,是否跟自己想的一樣,謝謝~

1. 請問變數是否有區分全域變數或區域變數?
    假設有區域變數:
        1-1. 在 IF 區塊裡宣告 Var 變數,只限於在 IF 區塊內使用,才能確保值是正確的?
               若在 IF 區塊外使用,就算編譯會過,也可能只是取到記憶體殘留值?
    假設只有全域變數:
        1-2. 等於在腳本任意地方宣告 Var 變數,那對這腳本而言,變數都是全域可正常使用的?
        1-3. 我可以把所有變數,都宣告在腳本首次執行時嗎? 對提升效能有幫助?
                if isfirstcall("") then begin {宣告所有變數} end;

2. 其他腳本使用函數的狀況
        2-1. 若函數腳本內宣告 Var 變數 X,主要腳本使用了這個函數,並且也宣告了同名的變數 X,那個這二個同名 X 變數值會不會互相干擾? 還是獨立使用各自的記憶體空間?
        2-2. 假設函數為 abc(i,j),它對主要腳本而言,abc 也是個序列值?
               我能用 abc(i,j)[偏移值] 來取得先前的執行結果嗎?

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/10/16

(1)目前XQ沒有全域變數。

(2)變數宣告不受流程控制,也就是說就算放在if裡面,第一根K執行程式時都會執行宣告的指令。

(3)不要在腳本內到處宣告變數,這樣不方便管理。最好在程式上方一起宣告變數及參數。

(4)函數的變數與主程式的變數各自獨立,不受彼此影響。

(5)函數運算後也是序列,可以用[1]抓取前一期的函數值。

  • 按讚來自於
  • YYFrankLi0813
FrankLi 發文於   2024/10/16

明白了, 我統一把它們拉到最上方去宣告和管理, 謝謝教授~ 

XS小編 發文於   2024/10/22

Hello FrankLi,

 

小編補充,函數[n] 的語法可能會因為跳著執行導致錯誤 (ex. highest(close, 10)[n]),故建議改用變數保存後再取前期值:

value1 = highest(close, 10);

value1[n];

 

相關人員有在規劃調整讓函數不會因此出錯,

  • 按讚來自於
  • YYFrankLi0813
FrankLi 發文於   2024/10/24

好的, 我會先保存到變數, 再取前值,

謝謝小編提醒.

 

 

發表回覆
Close