JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?JMP 15 假定左值是列名。 這不是早期版本中的行為。 這是有意為之還是一個錯誤?
重現:
dt=new table("test");
dt<<NEW column=""></NEW>這會在 JMP 15 中產生錯誤,但在 JMP 14 中不會產生錯誤。
高級統計建模消費者和市場研究回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?嗨特克斯尼爾森
感謝您的精彩解釋。 沒有想到第一個::在::中引用全局命名空間。 我一定是14.3搞錯了。 當我現在嘗試時,我也收到警告。
你寫了 ”默認情況下,如果只給出一個名稱,例如在賦值語句中”。
這也是我所期望的,但如果數據表中的列具有相同的名稱,JMP 明確假設它應該將值分配給該列。
正如大衛指出的那樣,似乎名稱默認為here(1)修復了該行為。 我總是等待將默認名稱設置為here名稱空間,因為它使調試更加麻煩。 但從現在開始,我一開始就會一直使用這個選項!
我希望 JMP 團隊能夠改變這種行為,因為它可能會產生一些很難發現的錯誤! 特別是,如果腳本實際上引用了沒有 :'s 的列!
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?@lwx228是不正確的。一個變量和一個列可以具有相同的名稱。實際上,這只是正確確定名稱範圍的問題,因此 JMP 知道您在談論哪個
採取以下腳本
dt=new table("Example", new column("A") );
dt << add rows(1);
a = 13;
:: a =47;
:a[1] = a;
show(a,::a,:a[1],dt:a[1]);
結果是
a = 47;
a = 47;
:A[1] = 47;
dt:a[1] = 47;
這裡發生的事情實際上是,所有變量和列都有一個由兩部分組成的名稱,用冒號“:”分隔
namespace:name
默認情況下,如果只給出一個名稱,例如在賦值語句中
a = 13;
假設“a”是一個變量。如果變量名前面有冒號,
:a[1] = a;
假設它指的是一列。在上面的示例中,名為“a”的列中的第一行將被賦予名為“a”的變量的當前值 (13)。
還可以為變量和列提供完整的兩部分名稱。
對於變量,默認命名空間(名稱的第一部分)稱為“:”。沒錯,是一個冒號,所以變量“a”的完整專有名稱是
::a
您可以看到在 Show() 語句中使用全名的結果及其結果
這個小腳本中列的完整專有名稱由分配給數據表的指針變量和實際數據表列名稱組成
dt:a
Show() 語句還說明了列的 2 部分名稱用法
我希望這不僅沒有讓大家感到困惑,反而給了一些啟發
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?我在 14.3 版本中也錯誤地運行了這個。

避免此錯誤的唯一方法是記住變量名不能與列名相同。
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?我認為行為取決於 global:a 是否已經存在。 這很煩人。
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?你需要
names default to here(1);
這很煩人——我不知道這是不是故意的;我更喜歡如果變量的範圍僅作為列名並且帶有冒號前綴(即:a)。
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?有趣的。 當我在 14.3.0 中運行它時,我沒有收到錯誤。 我沒有安裝早期版本。
回复:JMP 15 假定 jsl 中的左值是列名 - 這是有意的嗎?當我在 JMP 14.3 和 JMP 15.1 中啟動新會話並運行您的腳本時,我在兩個版本中都遇到相同的錯誤
Cannot set value for the column 'a' because the row number (0) is not valid.