gpt4 book ai didi

error-handling - 在Smalltalk/Pharo中创建一个以 block 为参数的键值消息

转载 作者:行者123 更新时间:2023-12-03 07:40:47 24 4
gpt4 key购买 nike

我有一个方案,其中一个类包含两个互斥的实例变量。一次只能实例化一个。确切地说,我有一个Promise类(试图向Pharo中添加Promise),它包含promiseError和promiseValue实例变量。然后,我想实现方法“then:catch:”。
此方法应如下工作:

promiseObject := [10/0] promiseValue.
promiseObject then : [ : result | Transcript crShow : result ]
catch : [ : failure | Transcript crShow : failure ] .

我对如何实现将块作为 method that accepts a block and the block accepts an argument的参数的方法有了一个想法。
我在下面的尝试显然不会起作用,但是我不知道如何使它起作用。
   then:aBlock catch: anotherBlock
|segment|
promiseValue ifNil: [ segment := promiseError ] ifNotNil: [ segment := promiseValue ].
promiseValue ifNil: [ segment := promiseValue ] ifNotNil: [ segment := promiseError ].
aBlock value:segment.
anotherBlock value: segment

这应该类似于try-catch块。

最佳答案

你尝试过这样的事情吗?

then: aBlock catch: anotherBlock
promiseError notNil ifTrue: [^anotherBlock value: promiseError].
^aBlock value: promiseValue

请注意,该代码不依赖 promiseValue是否为 nil,因为 nil可能是 promise的有效答案。但是,如果存在 promiseError,我们知道 promise失败,否则成功。

当然,这里我假设 promise成功或未成功完成后,将发送此消息。如果不是这种情况,则代码应在 promise信号量上等待。

关于error-handling - 在Smalltalk/Pharo中创建一个以 block 为参数的键值消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50071106/

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