欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
全部教程·
区块链·
Solidity
[目录]
·
Solidity 变量作用域
Solidity 教程
Solidity 开发环境搭建
Solidity 基础语法
Solidity 编译运行
Solidity 代码注释
Solidity SPDX 语法
Solidity 数据类型
Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名
Solidity 教程
Solidity 开发环境搭建
Solidity 基础语法
Solidity 编译运行
Solidity 代码注释
Solidity SPDX 语法
Solidity 数据类型
Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名Solidity 变量作用域
局部变量的作用域仅限于定义它们的函数,但是状态变量可以有四种作用域类型:
- public – 公共状态变量可以在内部访问,也可以从外部访问。对于公共状态变量,将自动生成一个 getter 函数。
- private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问。
- internal – 内部状态变量只能从当前合约或其派生合约内访问。
- external - 外部状态变量只能在合约之外调用 ,不能被合约内的其他函数调用。
示例:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract C {
uint public data = 30;
uint internal iData= 20;
uint private pData= 10;
function x() public returns (uint) {
data = 3; // 内部访问
iData = 2; // 内部访问
pData = 1; // 内部访问
return data;
}
}
// 调用外部合约
contract Caller {
C c = new C();
function f() public view returns (uint) {
return c.data(); // 外部访问
// return c.iData(); // error 不允许外部访问
// return c.pData(); // error 不允许外部访问
}
}
// 派生合约
contract D is C {
uint storedData; // 状态变量
function y() public returns (uint) {
data = 3; // 派生合约内部访问
iData = 2; // 派生合约内部访问
// pData = 1; //error 不允许派生合约内部访问
return iData;
}
function getResult() public view returns(uint){
return storedData; // 访问状态变量
}
}
public 与 private
对于 public 和 private,相信学过其他主流编程语言的人都能明白:
public修饰的变量和函数,任何用户或者合约都能调用和访问。
private修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也没有权限访问。
external 与 internal
除 public 和 private 属性之外,Solidity 还使用了另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)。
internal 和 private 类似,不过, 如果某个合约继承自其父合约,这个合约可以访问父合约中定义的“内部”函数。
external 与public 类似,不过这些函数只能在合约之外调用,不能被合约内的其他函数调用。
下一章:Solidity 常量
智能合约中,状态变量的值如果恒定不变,就可以通过 constant 进行修饰,定义为常量。常量的命名常常使用大写字母表示,单词之间用下划线“_”连接。常量有如下规定:不是所有的类型都支持常量,当前仅支持值类型和字符串 ...
AI 中文社