对此可能有一个简单的答案......但它似乎在逃避我.这是一个简化的例子:
public class Person
{
public string SocialSecurityNumber;
public string FirstName;
public string LastName;
}
Run Code Online (Sandbox Code Playgroud)
让我们说,对于这个特定的应用程序,如果社会安全号码匹配,并且两个名称都匹配,那么我们指的是同一个"人"是有效的.
public override bool Equals(object Obj)
{
Person other = (Person)Obj;
return (this.SocialSecurityNumber == other.SocialSecurityNumber &&
this.FirstName == other.FirstName &&
this.LastName == other.LastName);
}
Run Code Online (Sandbox Code Playgroud)
为了保持一致,我们还为团队中不使用该.Equals方法的开发人员覆盖==和!=运算符.
public static bool operator !=(Person person1, Person person2)
{
return ! person1.Equals(person2);
}
public static bool operator ==(Person person1, Person person2)
{
return person1.Equals(person2);
}
Run Code Online (Sandbox Code Playgroud)
好又花花公子,对吧?
但是,当Person对象发生时会发生什么null?
你不能写:
if (person == null)
{
//fail! …Run Code Online (Sandbox Code Playgroud) 我正在深入研究Symfony framwork(版本4)代码并发现代码的和平:
$env = $_SERVER['APP_ENV'] ?? 'dev';
Run Code Online (Sandbox Code Playgroud)
我不太确定这实际上是做什么但我想它扩展到类似的东西:
$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
或者可能:
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
有人对这个问题有任何精确性吗?
编辑:
对于回答问题的所有人:谢谢所有标记我的问题的人都是否定的,因为已经存在类似的问题(PHP三元运算符vs null合并运算符):
确实,这两个问题非常相似.然而,每个人都很难想象"??" 被称为合并运算符.
否则我可以在官方文档上轻松找到它:
http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
但是,对于那些不知道在php 7中添加了此功能的人来说,更有可能输入:
"php ?? operator"或"php double question mark operator"
这就是为什么我的问题具有附加价值的原因.
我请你,重新考虑你的负面反馈.谢谢
此致,Epixilog
我正在阅读STL源代码,我不知道&&运算符应该做什么.以下是一个代码示例stl_vector.h:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Run Code Online (Sandbox Code Playgroud)
"地址"是否有意义?为什么它有两个地址运算符而不是一个?
我有一个domainPrice设置为BigDecimal数据类型的域类.现在我正在尝试创建一个比较价格的方法,但似乎我不能在BigDecimal数据类型中有比较运算符.我是否必须更改数据类型或是否有其他方法?
我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.
请考虑以下代码:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)
编译器告诉我它找不到重载的运算符char[dim].
这是否意味着在字符串中没有+运算符?
但在几个例子中,存在类似这样的情况.如果这不是连接更多字符串的正确方法,那么最好的方法是什么?
c++ string-concatenation standard-library stdstring operator-keyword
当涉及构造函数时,添加关键字会explicit阻止热情的编译器在不是程序员的第一个意图时创建对象.这种机制是否也适用于铸造操作员?
struct Foo
{
operator std::string() const;
};
Run Code Online (Sandbox Code Playgroud)
例如,在这里,我希望能够投入Foo到一个std::string,但我不希望这种投射是隐含的.
有没有办法做类似于以下任何一种情况:
var1 = 10; var2 = 20;
var operator = "<";
console.log(var1 operator var2); // returns true
Run Code Online (Sandbox Code Playgroud)
- 要么 -
var1 = 10; var2 = 20;
var operator = "+";
total = var1 operator var2; // total === 30
Run Code Online (Sandbox Code Playgroud) javascript variables operators dynamic-variables operator-keyword
我注意到我可以做一些事情,比如2 << 5获得64并1000 >> 2获得250.
我还可以用>>在print:
print >>obj, "Hello world"
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
在Scala中,我可以创建一个caseclass,case class Foo(x:Int)然后将它放在一个列表中,如下所示:
List(Foo(42))
Run Code Online (Sandbox Code Playgroud)
现在,这里没什么奇怪的.以下对我来说很奇怪.运算符::是列表中的函数,对吧?对于Scala中有一个参数的任何函数,我可以用中缀表示法调用它.一个例子是对象的1 + 2一个函数.我刚刚定义的类没有运算符,那么以下可能如何?(+)IntFoo::
Foo(40) :: List(Foo(2))
Run Code Online (Sandbox Code Playgroud)
在Scala 2.8 RC1中,我从交互式提示中获得以下输出:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
Run Code Online (Sandbox Code Playgroud)
我可以继续使用它,但解释是什么?
我有以下代码:
# initialize
a = []
# create the table (name, age, job)
a.append(["Nick", 30, "Doctor"])
a.append(["John", 8, "Student"])
a.append(["Paul", 22, "Car Dealer"])
a.append(["Mark", 66, "Retired"])
# sort the table by age
import operator
a.sort(key=operator.itemgetter(1))
# print the table
print(a)
Run Code Online (Sandbox Code Playgroud)
它创建一个4x3表,然后按年龄对其进行排序.我的问题是,到底是key=operator.itemgetter(1)做什么的?该operator.itemgetter函数是否返回项目的值?为什么我不能只输入那样的东西key=a[x][1]?或者我可以吗?与运营商怎么能打印等形式的一定值3x2是22?
Python如何对表进行排序?我可以反向排序吗?
如何根据第一个年龄段的两列对其进行排序,然后如果年龄与b名称相同?
我怎么能不这样做operator?