有誰知道,在某些腳本語言,即PHP或Perl中,「美元變量表示法」背後的實際原因是什麼? Python的創建者沒有發現$variable
有用,我也沒有。爲什麼PHP和Perl迫使我經常按shift-4?腳本語言中的美元符號 - 爲什麼?
(OK,在Perl中你能以某種方式與區分$scalar
,@array
和%hash
解釋,但它仍然可以成功地避免了那裏,類型並不需要明確)
有誰知道,在某些腳本語言,即PHP或Perl中,「美元變量表示法」背後的實際原因是什麼? Python的創建者沒有發現$variable
有用,我也沒有。爲什麼PHP和Perl迫使我經常按shift-4?腳本語言中的美元符號 - 爲什麼?
(OK,在Perl中你能以某種方式與區分$scalar
,@array
和%hash
解釋,但它仍然可以成功地避免了那裏,類型並不需要明確)
我不知道這是最主要的原因,但如果PHP沒有與識別標識變量,下面將是不可能的。
echo "Welcome back $name, we last saw you on $date";
更新:
它還創建了一種叫做variable variable可能。儘管變量變量的有用性值得商榷,但我不會推薦任何人經常使用它們。
他們解析,這樣,當使用變量可以很容易地與其他東西區分開來。
通過「其他東西「你的意思可能是關鍵詞,但也許有20個關鍵詞,所以它可能很容易區分_them_和其他東西:) –
@JakubM。它取決於例如perl的語言。有260多個關鍵字,php可能更少 - 但是函數和其他符號(從庫/模塊導入的那些符號以及可以定義的符號)之間存在潛在的衝突。另外在無簽名的語言中 - 像'map'或'command'這樣的單詞沒有明確的含義(是一個數據結構,我放入一個變量或一個函數,或者一個shell內置/可執行文件) – shalomb
其中一個設計目標與Perl的變量是使他們從內建命令,保留字,控制流的話,等視覺上可區別。對於不熟悉Perl的人來說,所有的線索都可能看起來像線噪聲。但對於熟練掌握Perl的人來說,他們所稱的「信號」使得代碼更具可讀性,更易於理解。正如您已經注意到的那樣,Perl5中的sigil類型會根據所訪問的基礎數據而變化。 $爲標量,@爲數組,%爲散列。
但有額外的視覺提示$hash{key}
指的是哈希舉行的標量值。 $
sigil表示標量,括號表示我們正在索引一個散列(就像一個例子)。在索引的情況下,到一個數組,$array[0]
,如:$
告訴我們,我們在訪問數組中舉行的標量值,取得了明顯的方括號,在括號內的指數點。當我們看到@array[1, 2, 3]
,我們通過我們從一個數組元素抓取(假設列表環境)的列表@
的方式立即通知視覺(方括號還告訴我們應該從一個數組讓他們) 。這是一個數組片。散列片將是@hash{qw/ this that the other/}
。因此,@
再一次告訴我們要查找一個列表,大括號告訴我們我們從哈希中獲得它們。當我們看到沒有後綴括號的@
或%
時,我們正在取整個數組或散列。
線索迅速成爲第二天性。
Perl6有一點不同,並會採取精通Perl5的用戶幾天就習慣了。 ;)
有關於這個問題有好的維基百科的文章:Sigil (Computer Programming)
從視覺引導不談,印記使其他的東西也更容易;例如,解引用和插值。雖然可以使用更復雜的操作符來進行插值(並且偶爾還需要消除變量結尾和相鄰單詞字符的連續位置),但目標可能是讓簡單的事情變得簡單,同時讓困難的事情成爲可能。
Natural Language Principles in Perl:原因一語言可以擺脫某些地方含糊
部分原因是其他的模糊性通過多種機制抑制。英語使用數字和單詞順序,在代詞中使用一個案例系統的痕跡:「男人看着男人,他們回頭看着他。」這句話完全清楚了誰在做什麼。同樣,Perl在其名詞上有數字標記;即
$dog
是一個坑,而@dog
是(可能)很多。所以$
和@
有點像英文中的「this」和「these」。
在Perl中@array可以根據上下文標量(它返回數組的長度) – Bruce
你應該給紅寶石試試:) – Sairam
這是之前http://stackoverflow.com/questions/3073812問/ why-php-variables-start-with-a-sign-symbol – dpp