【问题标题】:Why memory keyword is mentioned in view function in solidity为什么在solidity的视图函数中提到了memory关键字
【发布时间】:2022-02-04 17:41:15
【问题描述】:
  function getAllWaves() public view returns (Wave[] memory) {
        return waves;
    }

我正在阅读 _buildspace 教程并找到了这段代码。我之前读过 memeroy 关键字在solidity中用于指定变量应该存储在memeroy(而不是状态)中,以便我们可以在函数调用后销毁它。但是为什么在这个视图函数的返回部分中提到了内存,因为它只是返回一个值。

我是新手,所以任何与此相关的文章也会有所帮助。 谢谢

【问题讨论】:

    标签: memory view blockchain ethereum solidity


    【解决方案1】:

    所有引用类型变量(包括数组)都需要指定data location

    EVM 无法直接从存储中返回,因为 storage 位置修饰符就像一个指针,只返回一个指针而不是实际值是没有用的。

    所以它将waves数组的值从存储加载到内存,然后从内存中返回。

    【讨论】:

    • 所以我们应该提到solidity函数中所有引用类型返回的内存?
    • @KarthikPn 在大多数情况下 - 是的......可能存在边缘情况,您会接受一些 calldata 值,在函数中执行验证,如果验证失败,然后返回相同的 calldata 值,可能连同其他一些值作为另一个返回参数。但是从我的脑海中,我现在找不到这种方法的实际用例......所以即使在技术上也可以返回calldata,你很可能只会返回memory对于引用类型(而不是storage)。
    猜你喜欢
    • 2016-02-23
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2016-11-14
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多