考虑下一个示例,我会覆盖amount = 0
while True:
amount = input("Hit me with your best num!")
try:
amount = int(amount)
if amount < 0:
print("That number is too tiny!")
elif amount > 6:
print("That number is yuge!")
else:
print("what a boring number, but I'll take it")
break # How you exit this loop
except ValueError:
print("Wow dude, that's like not even a number")
运算符以不断返回int()
:
+
然而,这仅适用于一个方向:
-
有没有办法强制这种相等方法反向工作?
答案 0 :(得分:1)
如果不改变其他课程,这是不可能的。基本上a == b
等于a.==(b)
。因此,如果要使其工作,则需要覆盖第二个类的==
运算符。
答案 1 :(得分:1)
有没有办法强制这种相等方法也能反向工作?
不,但您可以更改public void MarkOnline(string offline)
{
}
以识别public IQueryable<VistaLCPreview> GetData()
{
return db.Data;
}
的特殊情况。
Hash#==
如果我是你,我不会这样做。
答案 2 :(得分:1)
不,这是不可能的。
Ruby是一种面向对象的语言。 OO的基本思想是你向对象和接收者对象发送消息,而只有接收者对象才能决定如何响应该消息。
==
发送到对象a
,将对象b
作为参数传递,则a
和a
单独决定如何回应。==
发送到对象b
,将对象a
作为参数传递,则b
和b
单独决定如何回应。 唯一方式确保提供相同的响应,如果a
和b
合作并且同意给予相同的响应。
理论上可以设计一种语言,a == b
不是发送给a
或b
的消息,而是发送给某些第三个&#34;上下文对象&#34;。 IOW,a == b
不会被解释为a.==(b)
或b.==(a)
,而是some_context_object.==(a, b)
(例如,上下文对象可能就是您自己,即self.==(a, b)
)。在这种情况下,上下文对象可以访问a
和b
的 public API,并可以采取措施确保==
是可交换的。
但总的来说,根据OO的基本性质,消息是非交换的,接收者对象是特殊的。