Skip to main content
 首页 » 操作系统

swift之CS : equality of a promise in functional programming

2024年01月01日43xxx_UU

在计算机科学中什么时候两个 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。

不能将值定义为与 == 相等是可以的,因为就像我们说的那样 - 它们还不存在。