【发布时间】:2018-04-02 14:56:53
【问题描述】:
我阅读了一些关于storage、memory 和view、pure 的文档,但我并不完全理解它们。我有以下代码:
contract {
struct Random {
uint32 state;
uint8 i;
}
function main() pure internal {
Random rand = Random(seed, 0);
...
}
function get_rand(Random rand, uint8 n) pure internal returns (uint16) {
assert(n <= 16)
while (true) {
if (rand.i >= 8) {
rand.state = xorshift32(rand.state);
rand.i = 0;
}
uint8 r = uint8(rand.state >> (rand.i << 4)) & 0x0f;
rand.i += 1;
if (r < n) {
return r;
}
}
}
}
我的问题是:
1) 我应该将storage 或memory 标记为main 中的局部变量吗?我应该为get_rand 中的论点标记什么?
2) 突变会起作用吗?说,我读到pure 函数不能更改状态变量,并且复制了内存变量。将两者都标记为storage 是否足够?如果 get_rand 改变了它的论点,我还应该为 pure 声明它吗?
谢谢
【问题讨论】:
标签: solidity