Bri*_*ndy 17
在大多数语言中,它都是一样的.
人们经常做1 ==评估值,因为1不是左值.这意味着你不能意外地完成任务.
例:
if(x = 6)//bug, but no compiling error
{
}
Run Code Online (Sandbox Code Playgroud)
相反,您可以强制编译错误而不是错误:
if(6 = x)//compiling error
{
}
Run Code Online (Sandbox Code Playgroud)
现在,如果x不是int类型,并且你正在使用类似C++的东西,那么用户可能已经创建了一个operator ==(int)override,它将这个问题带到了新的含义.在这种情况下6 == x不会编译,但x == 6会.
这取决于编程语言.
在Ruby,Smalltalk,Self,Newspeak,Ioke和许多其他单一调度的面向对象编程语言中,a == b实际上是一个消息发送.例如,在Ruby中,它等同于a.==(b).这意味着,当你编写时a == b,然后执行==类中的方法a,但是当你编写时b == a,则b执行类中的方法.所以,这显然不是一回事:
class A; def ==(other) false end; end
class B; def ==(other) true end; end
a, b = A.new, B.new
p a == b # => false
p b == a # => true
Run Code Online (Sandbox Code Playgroud)
不,但如果您不小心输入,后一种语法会给您一个编译器错误
if (1 = evaluatedValue)
Run Code Online (Sandbox Code Playgroud)
请注意,今天任何体面的编译器都会在你写的时候发出警告
if (evaluatedValue = 1)
Run Code Online (Sandbox Code Playgroud)
所以它主要与历史原因有关.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |