在计算机科学中什么时候两个 promise 被认为是平等的?当类型或内容相同时?
作为一个更具体的例子,我在 swift 中有一个这样的结构:
struct {
case Value(@autoclosure () -> ValueType)
case Error(@autoclosure () -> ErrorType)
case None
}
和一个相等函数:
func == <ValueType, ErrorType> (left: Promise<ValueType, ErrorType>, right: Promise<ValueType, ErrorType>) -> Bool
{
switch (left, right)
{
case (.Value, .Value): fallthrough
case (.Error,.Error): fallthrough
case (.Nil, .Nil):
return true
default:
return false
}
}
或者这个:
func == <ValueType, ErrorType> (left: Promise<ValueType, ErrorType>, right: Promise<ValueType, ErrorType>) -> Bool
{
switch (left, right)
{
case (.Value, .Value):
return left.value() == right.value()
case (.Error,.Error):
return left.error() == right.error()
case (.Nil, .Nil):
return true
default:
return false
}
}
哪一个是正确的做法还是取决于应用程序?
请您参考如下方法:
在大多数语言中都没有 promise 平等的“标准”。大多数时候比较它们通常没有什么意义。不过,您会遇到一些事情。
promise 是一个时间奇异值,也就是说 - 它是一个可能可用也可能不可用的值。在 Swift 中讨论 promises 之间的相等性是相当随意的——我看不到从 promise1 == promise2 中得到什么,而你已经有了 === 的引用相等性。
我不会简单地在 promises 上定义 == 运算符。如果你想要一个平等的概念,你应该考虑一个时间平等检查- 即:
func willEqual(p1: Promise<ValueType, ErrorType>,
p2: Promise<ValueType, ErrorType>) -> Promise<ValueType, ErrorType> {
return p1.then { (val) in p2.then { (val2) in val == val2 }}
}
当且仅当两个 promise 最终相等时,其计算结果为 true。
不能将值定义为与 == 相等是可以的,因为就像我们说的那样 - 它们还不存在。
