我確信這已經發佈在某個地方,但我找不到它。
我很困惑 JSL 中如何處理變數的範圍。有人可以幫助澄清它是如何運作的嗎?
我幾乎總是使用 i 作為循環的索引變數。例如,在我的腳本中,我將有一個 for 循環,其中 i 作為呼叫另一個函數的索引。在這個函數中,還有另一個以 i 為索引的 for 迴圈。這在 C/Java/等中從來都不是問題。看來jsl有時能用,有時不行。我沒有例子,因為我無法弄清楚問題發生的確切位置。我認為這是對 JSL 中變數範圍的基本理解。
在 JSL 中,變量,讓我們使用名為“i”的變量的範例,描述為
命名空間:i
如果未指定任何內容來設定名稱空間,則正式規範為:
::我
由於 JSL 中的預設命名空間是名為「:」的命名空間…相當奇怪,但這是有歷史原因的。所以如果你輸入
我 = 7;
JMP 看到的是:
::i = 7;
因此,現在如果在 JSL 腳本的任何部分中,變數 i 發生更改,然後稍後引用,它將具有新值
showit = Function( {I},
Show(I);
);
I = 2;
showit(I);
I=3;
showit(I);
它返回
I = 2;
I = 3;
現在,函數可以透過使變數成為函數的局部變數來隔離變數
showit = Function( {I},{I},
I=55;
Show(I);
);
I = 2;
showit(I);
show(i);
這段程式碼的結果是:
I = 55;
i = 2;
請注意,全域使用的 i 值沒有改變。
現在還有一些最後的困惑:
當我說 i 的值可以更改,並且 i 的所有後續使用都將反映該更改時,這意味著即使在正在運行的不同腳本中它也會發生更改。因此,如果執行一個包含變數 i 的新腳本,它將具有在先前 JSL 腳本中設定的 i 值。因此,語句“Names Default to Here( 1 );”已實施。這個語句做了兩件事。首先,它將命名空間從“:”更改為“Here”。其次,它將「Here」命名空間中的所有變數與正在執行的腳本中的變數隔離。現在,如果您有以下腳本
Names Default to Here( 1 );
i = 7;
變數 i 的這個實例只能透過在腳本中使用 i 來更改......沒有其他腳本可以存取該變數 i 的變更。
聚苯乙烯 變數i的正式描述為:
我在這
以及在腳本中創建的腳本中的任何變量,位於“Names Default to Here( 1 );”之後語句會自動被放置到命名空間呼叫這裡。
Names Default to Here( 1 );
i = 7;
show(here:i)
我不能使用“here:”來明確地處理此處命名空間中的變數嗎?
為什麼列位址是透過例如「 :性別 」來表示的?
空命名空間意味著:“當前資料表() ”?