gpt4 book ai didi

exception-handling - 引发自定义错误/异常

转载 作者:行者123 更新时间:2023-12-05 00:49:46 25 4
gpt4 key购买 nike

我在玩 Pharo,想提出一个自定义的错误/异常/东西,但我不知道如何。
我已经浏览了“Pharo by Example”和“Deep into Pharo”的相关(我认为)章节;但无法对此做出正面或反面 - 它似乎超出了我需要的水平......

我有一个变量的 setter ,如果输入不是整数,我想引发错误/异常:

MyClass >> someVariable: anInteger
anInteger 是整数
ifFalse: [ self SomehowProtestLoadly - 我不知道该怎么做的部分]。
someVariable := anInteger

只是中止或退出就足够了......但如果可能的话,我想用更多的“耀斑”来做到这一点 - 并以更具解释性的方式......

最佳答案

最简单的方法是发出一般错误信号:

someVariable: anInteger
anInteger isInteger
ifFalse: [self error: 'must be an Integer'].
someVariable := anInteger

现在,如果您想发出特定错误信号,请执行以下操作:
  • 创建 Error 的子类,比如说,NonIntegerArgument
  • 像这样写你的代码
    someVariable: anInteger
    anInteger isInteger
    ifFalse: [NonIntegerArgument signal: 'must be an Integer'].
    someVariable := anInteger
  • 要处理此异常,请执行以下操作
    [myObject someVariable: self value]
    on: NonIntegerArgument
    do: [:ex | self handleException: ex]

  • 请注意,您的异常可以提供更多信息,例如发送的实际参数。为此,向您的 NonIntegerArgument 添加一个实例变量类,即 argument .为它添加一个 getter 和一个 setter。然后
    NonIntegerArgument class >> #signal: aString argument: anObject
    ^self new
    argument: anObject;
    signal: aString

    并以这种方式使用它
    someVariable: anInteger
    anInteger isInteger
    ifFalse: [
    NonIntegerArgument
    signal: 'must be an Integer'
    argument: anInteger].
    someVariable := anInteger

    现在, ex变量将能够响应 argument的违规消息。

    关于exception-handling - 引发自定义错误/异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47018479/

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