通过文档阅读互联网电脑的Motoko:
我意识到,对于“陷阱”这个词在这里意味着什么,我没有一个很好的模型:
有界数(陷阱) Nat8,Nat16,Nat32,Nat64,Int8,Int16,Int32,Int64 堵住过流和下过流 需要指定类型注释 文字: 13,0xf4,-20,1_000_000
这是否意味着,如果试图写入会导致溢出/下溢的数字,整数将保持在最大值/最小值?
在这个上下文中“陷阱”一词的来源是什么?它在这里的确切含义是什么?
发布于 2021-11-23 20:41:06
此上下文中的陷阱将导致执行中止。毒气罐仍会很好,但打电话给毒气罐会失败的。请参阅手册的这一部分。
作为演示,我设置了一个计数器罐,其类型为Nat8,来自其中一个模板,因此它应该支持0.255包含的值,并将其初始化为250:
$ 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,然后在下一次单击时,在浏览器控制台中显示:
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。
毒气罐的功能还很完善。如果我费心把一个减量按钮也放在那里,我可以数一数下来,然后增加价值,直到我再次达到极限。
https://stackoverflow.com/questions/69593890
复制相似问题