gpt4 book ai didi

error-handling - 文字记录的Smalltalk错误处理

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

假设我有以下方法:

MyClass>>addCategory: aCategory toEvent: anEvent
| cat |
cat := anEvent addCategory: aCategory
...

现在, #addCategory方法可以返回其他一些对象(例如 Foo类的东西)或抛出错误(使用 Error signal: 'message')。
  • 如果发生错误,我想在脚本上打印错误消息。
  • 如果是对象,我想在“成绩单”上打印一些消息(例如Transcript show: 'Category added!')并返回该对象。

  • 我一直在看 aBlock ifError: aBlock,像这样:
    MyClass>>addCategory: aCategory toEvent: anEvent
    | cat |
    cat := [anEvent addCategory: aCategory] ifError: [ :err | Transcript show: err. ]
    ...

    但是我不太清楚后来如何处理变量 cat以获得我想要的行为。

    最佳答案

    这是另一种方法。想法是将您的代码封装起来,好像不会失败,并用on: Error包装

    MyClass>>addCategory: aCategory toEvent: anEvent
    | cat |
    [
    cat := anEvent addCategory: aCategory.
    Transcript show: 'Category added!']
    on: Error
    do: [:err | Transcript show: err messageText].
    ^cat

    请注意,如果使用 cat,则不会分配 Error,因此该方法将使用 nil进行回答。还要注意,在错误处理程序块中不需要 ^nil

    请记住, on:do:的想法是允许您编写幼稚的代码,然后处理可能的错误情况,而无需将其内联到代码的无错误部分。
    [
    <my naive
    and clean
    lines of code>] on: Error do: [:err | oops!]

    您的解决方案是可以的,但可以在主代码中内嵌错误处理代码,这会使读者更难理解相关代码的主要思想。

    关于error-handling - 文字记录的Smalltalk错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637445/

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