2012-12-02 641 views
0

var = 1如何與var = 1區別?以及這些差異真的很重要或無關緊要的是什麼語言?var = 1和var = 1的區別

+3

第一個,等號周圍沒有空格,第二個是?不知道你在說什麼語言,這個問題是沒有意義的。在一些白色空間是重要的,而在另一些白色空間則不是。在某些語言中,單一的'='是一個賦值操作符,而在其他語言中它是平等的(在某些語言中,它都取決於上下文)。 –

+2

我對upvoted這個問題只是因爲我都喜歡閱讀其他答案,我喜歡寫我的:-) –

回答

4

在brainfuck中,兩者都被忽略爲評論。

在SH,var=1var1var = 1嘗試與論據=1運行程序var

4

那麼,在bash一:

var = 1 

試圖運行var程序與=1參數,而:

var=1 

var1。甚至還有另一種變體:

var= 1 

暫時設置var爲空字符串,並嘗試運行1程序(var恢復到其原始值的運行後)。

而且,對於完整性:

var =1 

它試圖用一個參數=1運行var程序。

+0

FORTRAN有EQ和EQV操作員......但不能簡單地寫'x EQ y',因爲(在fortran中)白色空間被忽略,大小寫被忽略。所以'x EQ y'會變成XEQY。爲了解決這個問題(類似於)stropping被實現了[c.f. stropping](http://en.wikipedia.org/wiki/Stropping_%28programming%29#Other_languages)這些操作符被實現爲'x.EQ.y'和'a.EQV.b' – NevilleDNZ

1

閱讀來自:空白的

link1 link2

奔跑(超出第一空白字符)寫在計算機編程語言源代碼內發生通常被忽略;這種語言是自由形式的

在計算機編程中,自由形式語言是一種編程語言,其中程序文本中頁面上字符的定位是不重要的。程序文本不需要像舊衝卡系統那樣放置在特定的欄中,而且線的結尾通常不重要。空格字符僅用於劃分令牌,並沒有其他意義。

大部分自由格式語言都來自ALGOL,包括C,Pascal和Perl。 Lisp語言是自由形式的,儘管它們不是從ALGOL下來的。 REXX大多是自由格式的,儘管在某些情況下,空格字符是連接操作符。 SQL雖然不是完整的編程語言,但也是自由格式。

0

據我所知,「=」是指在大多數編程語言「分配」。(編譯器只是忽略空白)

「==」和「===」可能是在一些地方不同,比如javascript。

0

注:在某些語言var本身會有問題。例如,在C#中,它是一個保留關鍵字。所以x = 1可能是一個更好的例子。另外'='是一些語言的賦值操作符,而另一些則是等式檢查操作符。我不再擔心這些問題,而是專注於不同的詞彙處理流派。

我一分錢的價值:

  • 在陵傳統的大多數編程語言(包括C和它的後代)這樣的空白不會有所作爲。只要這樣做不允許多個符號預定義操作符中的一個被形成,這樣的語言就可以消除空白而沒有語法(或語義效果)效果:因此`3+43 + 4相同,並且x++-5x ++ - 5相同,但不相同x + + - 5

  • 有語言如SML其中由空格不間斷的(非字母數字)個符號的任意序列是有效的標識符:在這樣的語言中3+4相同3 + 4x++-4x ++- 4') is not the same as X ++ - 4'

  • 有些情況下,甚至像3+4將被視爲一個單一的令牌即作爲東西3 + 4語法不同的語言。

  • FORTRAN的早期版本有一個收集批評,並擔任一個有趣的方法作爲粉碎的宇宙飛船錯誤故事的基礎。 (更多關於下面)。最後,一些語言,例如Miranda,Haskell和CoffeeScript,遵循ISWIM傳統並使縮進在語法上具有重要意義。


是臭名昭著的治療空白的語言的一個例子是Fortran語言(儘管大多數的批評適用於早期版本的語言;後來的版本更像陵在這方面)。

一個有趣的故事是導致火箭(在我聽到的版本航天飛機)發生故障,因爲FORTRAN忽略空格等DO 10 I = 1.100(這應該是DO 10 I = 1,100的bug - DO是FORTRAN相當於什麼是其他語言的for循環)被解析爲值100到變量DO 10 I的賦值。

的Fortran代碼DO 10 I = 1.100

行顯然的確發生。編譯器顯然做了 應該做的事,忽略空格並隱式聲明,然後 分配DO10I。值得注意的是,該程序實際上是在使用 之前進行測試的。檢測到錯誤,從而節省了火箭,但破壞了未來的事實。火箭的滅亡已被廣泛報道,並已成爲程序員民間傳說的一部分。

來源報價:

http://www-users.cs.york.ac.uk/susan/cyc/p/fbug.htm


在不同的編程語言空白的話題可以說是相當有趣:從這個相當採取

http://c2.com/cgi/wiki?SyntacticallySignificantWhitespaceConsideredHarmful

行情有趣和有趣(以一種令人討厭的方式)如此urce:

你必須想知道爲什麼空格總是用作分隔符。通過使用空格作爲分隔符 ,它可以防止用戶在其名稱中僅包含空格,導致CamelCase和EmbeddedUnderscore聖戰。考慮到在C中,空間僅用於類型/作用域信息的 。如果該語言選擇了使用冒號的類似pascal的方法,那麼整個HolyWar就可以避免。雖然

全球,常量,字符串:「出現了一個空指針異常」空指針異常消息=

看起來國外對我們的眼睛,它會避免一些討厭的風格 問題。特別是因爲空間分隔在整個Unix中似乎已經傳播了 ,所以與win32(關於文件名,SQL表格等空間沒有問題 )的兼容性很麻煩。

在許多編程語言(C,C++,Lisp,Java,Forth等等,如 以及HTML,...)中,空格的存在或不存在是 語法上重要的(否則「foo bar「意味着與」foobar「相同的 )(令牌分隔符)。 (LISP使用空格分隔列表中的 項目,而其他語言通常使用逗號。)但是,各種空格(製表符,空格鍵,返回鍵,換行符,空格鍵和空格鍵)以及各種空格都是空格與 「有些空白」的處理方式相同。一個空格,三個空格,2個換行符,一個製表符 - 它們之間沒有顯着差異 。

相關問題