Solidity中构造函数赋值无法传递给其他变量的原因咨询
Solidity合约变量初始化问题解析
你的问题核心在于Solidity的状态变量初始化顺序规则,具体逻辑拆解如下:
- Solidity中,合约的状态变量会严格按照代码里声明的先后顺序完成初始化,这个过程发生在构造函数执行之前。
- 你的合约里,
publicM是第一个声明的状态变量,初始化时会被赋予uint类型的默认值0。 - 紧接着初始化
remPublic,此时构造函数还没执行,publicM仍为默认的0,所以remPublic会被设为0。 - 最后才会运行构造函数里的
publicM = 10,此时publicM被更新为10,但remPublic已经完成初始化,不会再同步这个新值。
如果想让remPublic拿到构造函数赋值后的publicM值,最简单的修正方式是把remPublic的赋值逻辑移到构造函数内:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract MAth{ uint public publicM; uint public remPublic; constructor() { publicM = 10; remPublic = publicM; } }
内容的提问来源于stack exchange,提问作者Zeeshan Nawaz
相关产品推荐
相关产品推荐

