內置命名空間使用、名稱默認為此處、函數局部變量您好,我有一個關於模塊腳本中的命名空間和這些腳本中的函數的問題。
據我了解,在 Names Default to Here() 為 true 的情況下定義的任何變量都將分配在“here”命名空間中。 我不確定的是該名稱空間的範圍。 “這裡”是否始終被限定為完整腳本(例如在模塊內),或者它還可以創建腳本內各個函數的本地變量嗎? 在函數中創建局部變量的正確方法是什麼? 有沒有辦法讓每個函數中定義的變量僅在該函數中本地化,而不是在整個腳本中? 我的想像如下。
//Script to define different scopes of variables<BR />Names Default to Here(1); //set variables to be scoped to this script by default<BR />a = 1;<BR />b = 2;<BR /><BR />Function1 = Function({},<BR /> Names Default to Here(1);<BR /> c = 3;<BR />);<BR /><BR />Function2 = Function({},<BR /> Names Default to Here(1);<BR /> d = 4;<BR />);@lbrickweg @jcimini
回复:內置命名空間用法、名稱默認為此處、函數局部變量
@mringqui寫道:
知道了! “每次提交”語言非常有幫助。
作為後續工作,當從 App Builder 運行不同的模塊時,啟動 .jmpapp 時是否會包含每個模塊的腳本? 或者每個模塊的腳本實際上是在 << Create Instance 上單獨提交的,以便每個模塊都有自己的 Here 命名空間?
簡而言之,當使用 jmpapp 時,Here 通常是指每個模塊,還是整個應用程序?
@EvanMcCorkle
回复:內置命名空間用法、名稱默認為此處、函數局部變量知道了! “每次提交”語言非常有幫助。
作為後續工作,當從 App Builder 運行不同的模塊時,啟動 .jmpapp 時是否會包含每個模塊的腳本? 或者每個模塊的腳本實際上是在 << Create Instance 上單獨提交的,以便每個模塊都有自己的 Here 命名空間?
簡而言之,當使用 jmpapp 時,Here 通常是指每個模塊,還是整個應用程序?回复:內置命名空間用法、名稱默認為此處、函數局部變量Names Default To Here(1) 表示在此期間使用/創建的所有不合格符號提交(運行腳本)將位於同一個 Here 命名空間中。 因此它比單個 JSL 文件更廣泛。 因此,如果 A.jsl 包含 B.jsl,同時啟用“Names Default To Here”,則 A 和 B 創建的符號將在同一個 Here 命名空間中可用。
對於函數局部變量,您應該使用局部變量列表:
/* Default Local */
slow identity = Function({x}, {Default Local},
x squared = x*x; // unqualified name x squared is defaulted to function local
Sqrt(x squared)
);
/* Or list them explicitly */
slow identity = Function({x}, {x squared},
x squared = x*x; // local because we declared it above
Sqrt(x squared)
);
/* Or qualify them */
slow identity = Function({x},
local:x squared = x*x; // qualify to local explicitly
Sqrt(x squared)
);回复:內置命名空間用法、名稱默認為此處、函數局部變量嗯,對那裡的格式感到抱歉
//Script to define different scopes of variables
Names Default to Here(1); //set variables to be scoped to this script by default
a = 1;
b = 2;
Function1 = Function({},
Names Default to Here(1); //set variables set in Function1 to be scoped only to Function1
c = 3;
);
Function2 = Function({},
Names Default to Here(1); //set variables set in Function2 to be scoped only to Function2
d = 4;
);