var = 1和var = 1的差异

时间:2012-12-02 05:31:51

标签: equals equals-operator

var = 1与var = 1有何不同?这些差异在哪些语言中真正重要或无关紧要?

5 个答案:

答案 0 :(得分:4)

在brainfuck中,两者都被忽略为评论。

在sh中,var=1var设置为1,而var = 1尝试使用参数var和{{=运行程序1 1}}。

答案 1 :(得分:4)

好吧,bash为一个人:

var = 1

尝试使用var=参数运行1程序,同时:

var=1

var设置为1。甚至还有另一种变体:

var= 1

暂时将var设置为空字符串并尝试运行1程序(var在运行后恢复为原始值。)

而且,为了完整性:

var =1

尝试使用单个参数var运行=1程序。

答案 2 :(得分:1)

阅读:

link1 link2

在用计算机编程语言编写的源代码中出现的空格(超出第一个空白字符)的运行通常被忽略;这些语言是自由形式的

在计算机编程中,自由形式语言是一种编程语言,其中在程序文本中页面上的字符定位是无关紧要的。程序文本不需要像旧打孔卡系统那样放在特定的列中,并且通常行的末尾是无关紧要的。空格字符仅用于分隔标记,没有其他意义。

大多数自由格式语言都来自ALGOL,包括C,Pascal和Perl。 Lisp语言是自由格式的,尽管它们不是来自ALGOL。 REXX主要是自由格式的,但在某些情况下,空格字符是连接运算符。 SQL虽然不是完整的编程语言,但也是自由格式的。

答案 3 :(得分:0)

据我所知,' ='意味着分配'在大多数编程语言中。(编译器只是忽略空白)

' =='和' ==='在某些地方可能会有所不同,例如javascript。

答案 4 :(得分:0)

注意:在某些语言中var本身会有问题。例如,在C#中,它是一个保留关键字。所以也许x = 1会是一个更好的例子。 '='也是某些语言中的赋值运算符,而其他语言中是等号检查运算符。我没有担心这些问题,而是专注于不同的词汇处理学校。

我的便士值得:

  • 在Algol传统的大多数编程语言中(包括C及其后代),这样的空白不会产生任何影响。这样的语言允许消除没有句法(或语义效果)效果的空格,只要这样做不允许形成多个符号预定义运算符之一:因此`3+43 + 4和{{1}相同}}与x++-5相同,但与x ++ - 5不同。

  • 有一些语言,例如SML,其中任何不受空格中断的(非字母数字)符号序列都是有效的标识符:在这些语言中x + + - 53+4相同但{ {1}}(3 + 4 x ++ - 4'。

  • 有些语言甚至可以将x++-4之类的内容视为单个标记,即语法上与x ++- 4') is not the same as不同的内容。

  • 早期版本的FORTRAN有一个有趣的方法,它已经成为批评的焦点,并成为破碎的宇宙飞船错误故事的基础。 (更多内容见下文)。

  • 最后,一些语言,如Miranda,Haskell和CoffeeScript,遵循ISWIM传统,并使缩进在语法上具有重要意义。


一个以处理空白而臭名昭着的语言的例子是Fortran(尽管大多数批评都适用于该语言的早期版本;后来的版本在这方面更像是Algol)。

其中一个有趣的故事是导致火箭(我听到的版本中的航天飞机)发生故障的错误,因为FORTRAN忽略了空格,所以3+4(应该是3 + 4 - DO是FORTRAN等同于其他语言的DO 10 I = 1.100循环)被解析为值DO 10 I = 1,100到变量for的赋值。

  

FORTRAN代码行100

     显然确实发生过。编译器显然做到了   应该这样做,忽略空白并隐含地宣告然后   分配DO10I。值得注意的是,该程序实际上已经过测试过   使用。检测到错误,从而节省了火箭但毁了火箭   未来的事实。火箭的消亡已被广泛报道   已经成为程序员民俗的一部分。

引文来源:

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


不同编程语言中的空白主题非常有趣:

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

从这个非常有趣和有趣(以一种令人讨厌的方式)来源的行情来源:

  

人们必须想知道为什么空格总是被用作分隔符。通过使用   作为分隔符的空格,它阻止用户只包括   名称中的空格,导致CamelCase和   EmbeddedUnderscore圣战。考虑一下,在C中,仅使用空格   用于类型/范围信息。如果语言选择了更多   使用冒号的类似pascal的方法,然后可以避免整个HolyWar。而

     

global,const,string:null指针异常消息=“发生空指针异常”

     对我们来说可能看起来很陌生,它会避免一些讨厌的风格   问题。特别是因为空间划界似乎已经传播   整个Unix,与win32兼容(没有任何疑虑   关于文件名,SQL表格等空格。)麻烦。

     

在许多编程语言中(C,C ++,Lisp,Java,Forth,...等等)   以及HTML,...),空格的存在与否   语法上显着(否则“foo bar”意思相同   作为“foobar”)(标记分隔符)的东西。 (LISP使用空格分隔   列表中的项目...而其他语言通常使用逗号。)但是,   各种风格的空白(标签,空格键,返回,换行,   CR / LF)和各种空间都被视为相同的   “一些空白”。一个空间,三个空格,两个换行,一个标签 - 没有   它们之间存在显着差异。