首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是“陷阱”相对于整数下溢/溢出?

什么是“陷阱”相对于整数下溢/溢出?
EN

Stack Overflow用户
提问于 2021-10-16 08:20:04
回答 1查看 184关注 0票数 0

通过文档阅读互联网电脑的Motoko:

诱捕

我意识到,对于“陷阱”这个词在这里意味着什么,我没有一个很好的模型:

有界数(陷阱) Nat8,Nat16,Nat32,Nat64,Int8,Int16,Int32,Int64 堵住过流和下过流 需要指定类型注释 文字: 13,0xf4,-20,1_000_000

这是否意味着,如果试图写入会导致溢出/下溢的数字,整数将保持在最大值/最小值?

在这个上下文中“陷阱”一词的来源是什么?它在这里的确切含义是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-23 20:41:06

此上下文中的陷阱将导致执行中止。毒气罐仍会很好,但打电话给毒气罐会失败的。请参阅手册的这一部分。

作为演示,我设置了一个计数器罐,其类型为Nat8,来自其中一个模板,因此它应该支持0.255包含的值,并将其初始化为250:

代码语言:javascript
复制
$ cat counter-canister/main.mo 
actor {
    stable var currentValue: Nat8 = 250;

    public func increment(): async () {
        currentValue += 1;
    };

    public query func getValue(): async Nat8 {
        currentValue;
    };
};

然后单击“增量”按钮。按预期从250增加到255,然后在下一次单击时,在浏览器控制台中显示:

代码语言:javascript
复制
vendor.e49a5b15.js:831 Uncaught (in promise) Error: Call was rejected:
  Request ID: 0f549a49b80b31831e423196d086e36c12df51896ffaaa59e99bae7fa66047aa
  Reject code: 5
  Reject text: Canister ryjl3-tyaaa-aaaaa-aaaba-cai trapped explicitly: arithmetic overflow

    at pollForResponse (vendor.e49a5b15.js:831)
    at async n (vendor.e49a5b15.js:838)
    at async HTMLButtonElement.n (index.4a11dcea.js:5)

重新加载页面显示,该值仍在最大值255。

毒气罐的功能还很完善。如果我费心把一个减量按钮也放在那里,我可以数一数下来,然后增加价值,直到我再次达到极限。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69593890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档