gpt4 book ai didi

swift - CS : equality of a promise in functional programming

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:22 26 4
gpt4 key购买 nike

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

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

关于swift - CS : equality of a promise in functional programming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com