很快就有两个相等运算符:double equals( ==
)和Triple equals( ===
),两者之间有什么区别?
简而言之:
==
操作员检查其实例值是否相等, "equal to"
===
操作员检查引用是否指向同一实例, "identical to"
长答案:
类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时,
==
这意味着它们的实例是否彼此相等。它不必是相同的实例才能相等。为此,您需要为自定义类提供一个相等条件。默认情况下,自定义类和结构不接受等效运算符的默认实现,即“等于”运算符
==
和“不等于”运算符 !=
。为此,您的自定义类需要遵循 Equatable
协议及其 static func == (lhs:, rhs:) -> Bool
功能
让我们看一个例子:
class Person : Equatable {
let ssn: Int
let name: String
init(ssn: Int, name: String) {
self.ssn = ssn
self.name = name
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.ssn == rhs.ssn
}
}
P.S.:
由于ssn(社会安全号码)是唯一的号码,因此您无需比较其名称是否相等。
let person1 = Person(ssn: 5, name: "Bob")
let person2 = Person(ssn: 5, name: "Bob")
if person1 == person2 {
print("the two instances are equal!")
}
尽管person1和person2引用指向Heap区域中的两个不同实例,但是它们的实例相等,因为它们的ssn编号相等。所以输出将是the two instance are equal!
if person1 === person2 {
//It does not enter here
} else {
print("the two instances are not identical!")
}
===
操作员检查引用是否指向相同的实例 "identical to"
。由于person1和person2在堆区域中有两个不同的实例,因此它们并不相同,并且输出the two instance are not identical!
let person3 = person1
P.S:
类是引用类型,并且通过此分配操作将person1的引用复制到person3,因此两个引用都在Heap区域中指向同一实例。
if person3 === person1 {
print("the two instances are identical!")
}
它们是相同的,输出将是 the two instances are identical!
我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?
问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(
我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该
我是Hadoop的新手。我正在浏览专业Hadoop解决方案的书,以获得一些关于Hadoop和生态系统的知识。我想澄清HDFS和HBase之间的主要区别是什么。我理解的方式就像两者都是存储系统。它们的区别只是在访问数据方面。HBase通过非关系型数据库访问数据,HDFS使用计算框架(MapReduce)处理数据。如果是这种情况,为什么我们不能只有一个存储HDFS或HBase。根据需求,他们将插入和插
有人能解释一下 和 我不知道确切的意思。
在Flink中,有两个东西提供了相似的行为。两者之间的区别是什么。 MaxOutOfOrness:与BoundedOutOfOrdernessTimestampExtractor一起使用。通过将事件时间后面的水印延迟MaxOutOfOrdeness值,允许流的元素按maxOutOfOrdeness值的大小乱序。 允许延迟:在此参数定义的更多时间内保持窗口状态。 当你已经可以通过maxOutOfOr