String 如何将Rebol错误格式化为字符串?

String 如何将Rebol错误格式化为字符串?,string,exception-handling,error-handling,rebol,rebol3,String,Exception Handling,Error Handling,Rebol,Rebol3,雷波的错误!类型作为一个对象返回,您可以从中检查和提取属性 >> result: try [1 / 0] ** Math error: attempt to divide by zero ** Where: / try ** Near: / 0 >> probe result make error! [ code: 400 type: 'Math id: 'zero-divide arg1: none arg2: none

雷波的错误!类型作为一个对象返回,您可以从中检查和提取属性

>> result: try [1 / 0]
** Math error: attempt to divide by zero
** Where: / try
** Near: / 0

>> probe result
make error! [
    code: 400
    type: 'Math
    id: 'zero-divide
    arg1: none
    arg2: none
    arg3: none
    near: [/ 0]
    where: [/ try]
]
...
请注意,当该错误出现在控制台上并且是评估链的最后一个值时,它会将其转换为字符串并将其呈现给用户。e、 g.“数学错误:试图除以零”


如何在自己的代码中生成此字符串?我知道我可以深入挖掘
系统
对象并找到那些字符串,然后自己尝试将它们组合起来。但是二进制文件中不是有一些官方函数可以实现这一点吗?

在REBOL3中,您可以简单地使用它来转换错误!对象转换为其漂亮的打印表示形式:

>> err: try [1 / 0]
...

>> form err
== {** Math error: attempt to divide by zero
** Where: / try
** Near: / 0
}

在REBOL3中,您可以简单地使用转换错误!对象转换为其漂亮的打印表示形式:

>> err: try [1 / 0]
...

>> form err
== {** Math error: attempt to divide by zero
** Where: / try
** Near: / 0
}

您可以像这样创建自己的错误,其中错误对象上的“do”会处理错误

make-sl4a-error: func [
    message
][
    do make error! [
        type: 'Access
        id: 'Protocol
        arg1: message
    ]
]
在REBOL2中,您需要在形成之前解除错误

>> err: try [ 1 / 0 ]
>> print mold disarm err

make object! [
    code: 400
    type: 'math
    id: 'zero-divide
    arg1: none
    arg2: none
    arg3: none
    near: [1 / 0]
    where: none
]

您可以像这样创建自己的错误,其中错误对象上的“do”会处理错误

make-sl4a-error: func [
    message
][
    do make error! [
        type: 'Access
        id: 'Protocol
        arg1: message
    ]
]
在REBOL2中,您需要在形成之前解除错误

>> err: try [ 1 / 0 ]
>> print mold disarm err

make object! [
    code: 400
    type: 'math
    id: 'zero-divide
    arg1: none
    arg2: none
    arg3: none
    near: [1 / 0]
    where: none
]

对于Rebol2,您可以使用以下函数(我从Doc或Gabriele IIRC获得)

您需要解除您的错误:

>> print form-error/all disarm try [1 / 0]
** Math Error: Attempt to divide by zero
** Near: 1 / 0

对于Rebol2,您可以使用以下函数(我从Doc或Gabriele IIRC获得)

您需要解除您的错误:

>> print form-error/all disarm try [1 / 0]
** Math Error: Attempt to divide by zero
** Near: 1 / 0

人力资源管理。嗯,那很容易。嗯,那很容易。很高兴知道……但我不是这么问的!!(Rebol3 AFAIK中没有武装错误)好吧,既然你当时没有接受Earl的答案,我想你一定是在问别的问题,而不是关于错误的形式或模式!顺便说一句,犯错误!只创建一个错误对象。它在使用前必须武装好。很高兴知道……但我不是这么要求的!!(Rebol3 AFAIK中没有武装错误)好吧,既然你当时没有接受Earl的答案,我想你一定是在问别的问题,而不是关于错误的形式或模式!顺便说一句,犯错误!只创建一个错误对象。它在使用前必须带上武器。好吧,那是一口。Rebol3方法的好理由!好吧,那是一口。Rebol3方法的好理由!