可有人请把我从我的苦难与此吗?我试图弄清楚为什么派生运算符==永远不会在循环中被调用.为了简化示例,这是我的Base和Derived类:
class Base { // ... snipped
bool operator==( const Base& other ) const { return name_ == other.name_; }
};
class Derived : public Base { // ... snipped
bool operator==( const Derived& other ) const {
return ( static_cast<const Base&>( *this ) ==
static_cast<const Base&>( other ) ? age_ == other.age_ :
false );
};
Run Code Online (Sandbox Code Playgroud)
现在当我像这样实例化和比较时......
Derived p1("Sarah", 42);
Derived p2("Sarah", 42);
bool z = ( p1 == p2 );
Run Code Online (Sandbox Code Playgroud)
... 一切都很好.这里调用了来自Derived的operator ==,但是当我循环遍历列表时,将指针列表中的项目与Base对象进行比较......
list<Base*> coll;
coll.push_back( …
Run Code Online (Sandbox Code Playgroud) 我在SO上看到了几个问题,包括函数isEqual:
而不是标准的ansers ==
.
到目前为止,我只学会使用它==
,所以我想知道什么是更好的使用,每个的优点和缺点是什么?你应该什么时候使用它们?
谢谢.
我想知道CLR类型是否会返回以下不同的结果:
Object.Equals(objA, objB)
objA.Equals(objB)
(objA == objB)
Run Code Online (Sandbox Code Playgroud)
我确实意识到在CLR之外有人可以轻松地实现IEqualtable
Equals并且不正确地重载==运算符.我不关心那些不正当地实施这些的人.我所关注的是类(包括String,Int32等)以不同的方式实现这3个.
此外,如果可能的话,哪一个应该是用于整体比较的(全面).我想知道这是因为我遇到了一个文件,它使用Object.Equals(objA, objB)
了整个视图模型而不是其他两个.
private string _name;
public string Name
{
get { return _name; }
set
{
if (Equals(_name, value)) return;
...
}
}
private int _id;
public int Id
{
get { return _id; }
set
{
if (Equals(_id, value)) return;
...
}
}
private Object _obj;
public Object TheObject
{
get { return _obj; }
set
{
if (Equals(_obj, value)) return;
...
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
Javascript === vs ==:我使用哪个"相等"运算符是否重要?
什么时候JavaScript ==比===更有意义?
将字符串与未定义值进行比较时,以下方法之间的区别是什么.
var x;
if(x==undefined)
{
alert(x);
}
Run Code Online (Sandbox Code Playgroud)
和
if(x===undefined)
{
alert(x);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么我更喜欢第二种方法..请让我知道优点..
我试着理解这段代码:
double b = 3;
object o = b;
Console.WriteLine(o.Equals(3));//false
Console.WriteLine(o.Equals(b));//true
Console.WriteLine( o == (object)b );//false
Run Code Online (Sandbox Code Playgroud)
o.Equals(b)
是true
?Equals
不检查的引用,为什么o.Equals(3)
是false
? 谢谢.
我需要从包含一些字段的变量中找到最后一列.我需要写一些类似的东西:
if [ #the last column = "R" ];
then
value=`echo "'$value'"`
fi
Run Code Online (Sandbox Code Playgroud)
可能吗?
object A extends App {
def closure1(x:Int) = {
object O {
def getX = x
def add(y:Int) = x+y
}
val foo = O
foo
}
def closure2(x:Int) {
object O {
def getX = x
def add(y:Int) = x+y
}
val foo = O
foo
}
println(closure1(4).getClass)
println(closure2(4).getClass)
}
result:
$scala A
class A$O$3$
void
Run Code Online (Sandbox Code Playgroud)
我正在编写一个生成SQL的DSL.加载表的语法是:
session.activateWhere( _.User.ID == 490 )
Run Code Online (Sandbox Code Playgroud)
这将从用户表中选择ID列为490.我可以使用"=="因为我可以覆盖"equals()"来生成正确的SQL.我的问题是"!="不起作用,因为它调用equals()然后否定结果.可悲的是,"!="是最终的,所以我无法覆盖它.在我的equals()方法中有什么方法可以告诉它是作为!=的一部分调用的吗?
我已经实现了一个"<>"操作,在逻辑上做与"!="相同的操作,它工作正常:
session.activateWhere( _.User.ID <> 490 )
Run Code Online (Sandbox Code Playgroud)
我的问题是,不仅"!="有效语法(对编译器而言),它将运行并生成与用户意图完全相反的语法.
因为'='
在Perl中简单地重载并不像人们期望的那样,所以这样做的正确方法是什么?
从报价超载的perldoc:
简单赋值不可重载(该
'='
键用于复制构造函数).Perl确实有办法让对象做任何你想做的事情,但这涉及到使用tie()
,而不是overload
- 请参阅下面的领带和COOKBOOK示例.
我已经阅读了COOKBOOK和文件的领带,我很难弄清楚如何以这种方式使用它.
我希望能够像这样创建一个对象:my $object = Object->new()
然后当我将它分配给某些东西时,我希望它能做一些特殊的处理.
例如:$object = 3
内部会做类似的事情$object->set_value(3);
我知道这不一定是好习惯.这更像是一个教育问题.我只是想知道如何做到这一点.不是否应该这样做.
如果我们==
在的表达式ulong
和的表达式之间使用运算符ulong?
,则bool ulong(ulong left, ulong right)
似乎会使用运算符重载。
换句话说,运算符认为两个表达式都不为空。
在此示例程序中,equal
无例外,正确地变为false。
void Main()
{
var temp = new Temp(0);
object temp2 = null;
var equal = temp.Id == (temp2 as Temp)?.Id; // False :) but how?
}
public class Temp
{
public ulong Id {get;}
public Temp(ulong id)
{
this.Id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
ulong?
值从null 转换为的转换ulong
。(ulong)(ulong?)null
抛出:“可为空的对象必须具有一个值。”ulong?
包括null)返回正确的值?如果是这样,怎么办?该类型ulong?
具有比更大的可能值ulong
,因此应该有一组两个值映射到相同的 ulong
值,这将引入一个错误的肯定“ …equals-operator ×10
c# ×3
equals ×2
scala ×2
.net ×1
awk ×1
boxing ×1
c++ ×1
closures ×1
comparison ×1
equality ×1
iequatable ×1
if-statement ×1
iphone ×1
javascript ×1
ksh ×1
nullable ×1
objective-c ×1
oop ×1
operators ×1
overriding ×1
perl ×1
polymorphism ×1
unix ×1
virtual ×1