当像这样调用合约时:
if(!contractname.somefunction()) throw;
它既检查堆栈(检查合约调用是否失败(,也检查合约调用是否成功但在内存中返回 false。
但是当使用.value()
或.send()
时,它只检查合约调用是否失败,这意味着它不会检查内存中的返回值。
那么如何在发送以太币的同时检查内存中的返回值呢?
一个好方法是通过事件。对于该somefunction()
,您可以拥有以下内容:
contract Contractname {
event ReturnValue(uint);
function somefunction(){
uint result;
//...some computation right here
emit ReturnValue(result);
}
}
不可能在同时返回返回值的同时发送以太币。