2012-05-24 35 views
2

基於瀏覽器的軟件StudyTRAXhttp://wiki.studytrax.com),用於研究的數據管理,允許自定義表單,並形成通過JavaScript變量管理。然而,一個StudyTRAX「變量」(本質上,一個表單元素(包含HTML屬性)及其相應參數的表示,以及一些數據鍵入/等)必須參考#<varname>,而常規的JavaScript變量將只是是<varname>推理語言要求的變量名稱前綴

這樣的事情是爲了使分析變得容易嗎?還是僅僅爲了區分這兩種情況,讓那些技術上不那麼傾向的研究人員不會很難搞清楚他們在做什麼?鑑於JavaScript的本質,我認爲StudyTRAX「變量」只是定義了一些常規JavaScript對象,這樣可以使表單設計和定製更簡單,因此後者會更有意義,但我錯了嗎?

另外,我知道有其他的編程語言確實需要特定變量的前綴(雖然我不能想出一些把我的頭此刻的頂部);在語言設計中,這種選擇的通常推理是什麼?

回答

2

兩部分答案,StudyTRAX幾乎肯定使用預處理器來做一些魔術。 JavaScript使得這個相對性很容易,但並不像Lisp那麼容易。你仍然需要解析代碼。通過加前綴,解析器可以忽略很多JavaScript的複雜語法,並且在不需要「圖像完美」編譯器的情況下達到最佳效果。其實,很多模板系統都是這樣做的。它是Lisp的準引用(see Greenspun's Tenth Rule)的實現。

至於一般的前綴,瞭解他們的最好辦法是嘗試寫一個解析器沒有他們的語言。對於非常動態和純粹的語言,比如Lisp和JavaScript,其中一切都是List /對象,這並不算太壞。當語言的方法與對象不同時,或者函數不是一流的時,解析器開始不得不問自己什麼類型的東西「富」引用?來自Ruby的一個令人討厭的例子是:一個前綴不確定的標識符是self上隱含的局部變量或方法。在Rails中,有幾個函數是用method_missing實現的。 Person.find_first_by_rank工作正常,但

Class Person < ActiveRecord::Base 
    def promotion(name) 
    p = find_first_by_rank 
    [...] 
    end 
end 

給出了一個錯誤,因爲find_first_by_rank看起來可能是一個局部變量和Ruby是嚇得叫method_missing的東西,可能只是一個拼寫錯誤的局部變量。

現在設想區分實例變量(prefix- @),類變量(前綴 - @@),全局變量(前綴 - $),常量(首字母Capitol),方法名稱和局部變量(否前綴小寫)僅由上下文。

+1

comestorm的回答很好,但我真的很喜歡你的。感謝更詳細的解釋。 – JAB

0

(來自編譯器& Language Hobbyst Designer)。

您的問題更專門針對「StudyTRAX」軟件。

在編程的早期,在基本變量的前綴爲$(字符串,「A $」),從數值差異。今天,一些編程語言如PHP以「$」爲前綴。 COBNOL使用從A到I開始的變量,整數和後來的浮點數字。

改造,後來,執行一些代碼,它是一個複雜的任務,這就是爲什麼很多程序員來說,使用快捷鍵如添加前綴或後綴編程語言。

在很多同事或大學中,存在用於將代碼從編程語言轉換爲計算機所執行的特定類/課程,例如「編譯器」,「自動機」,「語言設計」等,因爲它不是一件容易的任務。

0

Perl中需要不同的變量的前綴,這取決於數據的類型:

$scalar = 4.2; 
@array = (1, 4, 9, 16); 
%map = ("foo" => 42, "bar" => 17, "baz" => 137); 

據我瞭解,這是爲了讓讀者能夠立即識別他們正在處理什麼樣的對象有。這不是讀者是否在技術上傾向於問題:如果你減少程序員的認知負荷,他可以利用自己的智力去做更重要的事情,而不是找出繁瑣的句法細節。

無論是Perl的設計是成功的在這方面是另外一個問題,但我相信這就是功能背後的原因。

+0

這很有意義,考慮到現在很多IDE爲IDE所支持的語言變量提供了相同類型的功能(至少對於靜態類型語言來說,至少,儘管解釋型環境可以爲動態類型提供上下文支持以及)。 Perl是否僅僅爲一般類型的變量而不是特定類型(即整數和浮點值都是$標量)?還沒有真正有過任何經驗。 – JAB

+0

是的:整數,浮點值,字符串和引用在Perl中都被視爲標量,並且需要'$ varname'語法。 – comingstorm