正在与一些基于大脑测试员的朋友讨论这个问题是否有效。它引导我们讨论是否有可能在任何语言中对原始类型重载+
或-
。
是否有任何语言可供您进行以下评估:
answer = 8 + 11;
if (answer == 96){
//Yay! It worked!
}
答案 0 :(得分:1)
C#实施;不是完全你想要的东西(Trick
不是原始类型),而是所需的行为:
public struct Trick {
public override bool Equals(object obj) {
return true;
}
public override int GetHashCode() {
return 0;
}
// Trick can be implicitly created from any int (e.g. from 19, 96 etc.)
public static implicit operator Trick(int value) {
return new Trick();
}
// All Trick instances are equal to each other
public static bool operator == (Trick left, Trick right) {
return true;
}
public static bool operator != (Trick left, Trick right) {
return false;
}
}
现在,我们已准备好测试Trick
:
Trick answer;
// ------ Now goes your fragment -----------------------
answer = 8 + 11; // Trick instance can be implicitly created from int (from 19)
// .Net can't compare answer (which is Trick) and int (96), however
// Trick instance can be implicitly created from int (from 96)
// so .Net will create Trick instance from 96 and compare two Tricks
if (answer == 96) {
// when comparing two Trick instances:
// one created from 19 and other created from 96
// they are equal to one another
Console.Write("Yay! It worked!");
}
你会得到
“耶!它工作了!”
答案 1 :(得分:0)
C ++和Ruby。
//C++
class X
{
public:
X& operator+=(const X& rhs) // compound assignment (does not need to be a member,
{ // but often is, to modify the private members)
/* addition of rhs to *this takes place here */
return *this; // return the result by reference
}
// friends defined inside class body are inline and are hidden from non-ADL lookup
friend X operator+(X lhs, // passing lhs by value helps optimize chained a+b+c
const X& rhs) // otherwise, both parameters may be const references
{
lhs += rhs; // reuse compound assignment
return lhs; // return the result by value (uses move constructor)
}
};
红宝石:
class String
def <<(value)
self.replace(value + self)
end
end
str = "Hello, "
str << "World."
puts str