在 Solidity 中,pure 修饰符和 view 修饰符有什么区别?

aan*_*ain 10 functional-programming blockchain ethereum solidity smartcontracts

该代码产生相同的输出。

pragma solidity ^0.5.0;
contract mycontract
{

   function add(uint c, uint d) public pure returns(uint)
  { uint e=c+d;


   return e;

  } 
   function add(uint j, uint k) public view returns(uint)
  { uint f=j+k;


   return f;

  } 

}
Run Code Online (Sandbox Code Playgroud)

Yil*_*maz 16

  • view表示该函数不会以任何方式改变存储状态。但它允许您“查看”或阅读它

  • pure更严格的是,表示它连存储状态都不会读取。

    纯函数是给定相同输入、始终返回相同输出的函数。但随着用户与其交互,合约的状态不断变化。因此,如果将状态变量作为参数传递给函数,由于状态正在变化,该函数将不是纯函数。这就是为什么纯函数无法访问状态的原因。

    “纯”函数在数学库中大量使用。例如SafeMath.sol

    同样在纯函数内部,你不能

    • 使用address(this).balance

    • 调用除纯函数之外的其他函数

如果您在外部调用viewpure运行,则无需支付汽油费。然而,如果由另一个函数在内部调用,它们确实会消耗gas。


小智 11

pure 不查看也不修改状态。即它只能使用提供给它的东西来运行。view 无法修改状态,但可以查找状态