【发布时间】:2021-08-24 00:38:08
【问题描述】:
是否可以让 getFirst10() 工作?似乎不可能将 uint256[100] 内存转换为 uint256[10] 内存。
contract Test {
uint256[100] private foo;
function get() external view returns (uint256[100] memory) {
return foo; // Works
}
function getFirst10() external view returns (uint256[10] memory) {
return uint256[10](foo); // Doesn't compile
}
}
我得到的最接近的是上面的尝试,但它失败并出现错误:Error: Explicit type conversion not allowed from "uint256[100] storage ref" to "uint256[10] storage pointer"
我想要做的是有一个函数返回一个大的 uint256[] 存储数组的子切片。有没有办法做到这一点?我是否必须改为返回 calldata 并复制每个元素?
【问题讨论】:
-
为什么要这样做? uint256[100] 内存转 uint256[10] 内存
-
我想在存储上返回一片 uint256[]。我只需要数据的一个子集。
-
切片语法不适用于存储阵列。我想知道是否还有其他一些强制转换语法,但我认为解决方案只是将元素循环并复制到函数中的新静态内存数组中。